How to debug D on Linux

user1234 user1234 at 12.de
Wed Jan 13 14:27:48 UTC 2021


On Wednesday, 13 January 2021 at 13:47:55 UTC, Roguish wrote:
> On Wednesday, 13 January 2021 at 13:30:48 UTC, Roguish wrote:
>> Anything else I need to know when debugging on Linux, without 
>> an IDE?
>
> One specific question I have is: what's the difference between 
> -g and -debug and -d-debug?
>
> Also, what does it mean to "always emit a stackframe" (compiler 
> option -gs) ?

-g     : generate dwarf info, the debug info, the most important
-debug : compiles the debug statements, e.g debug logging. not so 
important, this
          is a conditional compilation feature.
-gs    : always emit a prelude/prologue. but dmd pretty much 
always do that even
          when not required (sigh).

You really mostly only requires -g. Then you have to learn gdb.
A few basis to get started, a session for a segfault is often like

   $ gdb ./myapp
   $ run

and when it crashes, note the source position, additionally

   $ bt
   $ p somevar
   $ p some.more.complex.expression

may already give interesting infos. If not, during a second 
session you will rather put breakpoints to see what happens 
before the access violation and step from that breakpoint to the 
code that accesses unowned memory.

   $ gdb ./myapp
   $ break <somefile>.d <linenum>
   $ run

and then step by step, each time it pauses you inspect the 
interesting stuff.
Note that I may be wrong on the syntax of the commands as I 
always use an IDE GUI.


More information about the Digitalmars-d-learn mailing list