V-R
V-R

Reputation: 1401

Problems with hitting Line Of Code breakpoints in D code with GDB and LLDB

I've made sure to build my D program with the -g flag (add symbolic debug info) and it looks like I can set simple LOC breakpoints in both GDB and LLDB like this: b SomeModule.d:42 - the debugger replies with a memory address for the new breakpoint.

However when I run the program from the debugger, it gets stopped somewhere completely different than SomeModule.d:42. What am I missing?

Upvotes: 0

Views: 155

Answers (1)

V-R
V-R

Reputation: 1401

D is a safe by default, garbage-collected by default, language. So in addition to your own breakpoints, programs will often be interrupted by the Garbage Collector Signals (SIGUSR1, SIGUSR2).

In GDB, this can be prevented by:

(gdb) handle SIGUSR1 nostop noprint
Signal        Stop      Print   Pass to program Description
SIGUSR1       No        No      Yes             User defined signal 1
(gdb) handle SIGUSR2 nostop noprint
Signal        Stop      Print   Pass to program Description
SIGUSR2       No        No      Yes             User defined signal 2

Even better, automate by putting the above 2 commands in a file and start GDB with -x gdb_command_file.

The corresponding LLDB-ese sounds different:

(lldb) process handle --stop false --notify false SIGUSR1 SIGUSR2

I'm not sure it's possible to automate it similarly with LLDB alone.

Upvotes: 1

Related Questions