使用GDB和LLDB在D代码中命中代码行断点的问题

使用GDB和LLDB在D代码中命中代码行断点的问题,gdb,d,lldb,Gdb,D,Lldb,我已确保使用-g标志(添加符号调试信息)构建我的D程序,并且看起来我可以在GDB和LLDB中设置简单的LOC断点,如下所示:b SomeModule.D:42-调试器使用新断点的内存地址进行响应 但是,当我从调试器运行程序时,它会在与SomeModule.d:42完全不同的地方停止。我遗漏了什么?D是一种默认安全、默认垃圾收集的语言。 因此,除了您自己的断点之外,程序通常还会被垃圾收集器信号(SIGUSR1、SIGUSR2)中断 在GDB中,这可以通过以下方式防止: (gdb) handle S

我已确保使用
-g
标志(添加符号调试信息)构建我的D程序,并且看起来我可以在GDB和LLDB中设置简单的LOC断点,如下所示:
b SomeModule.D:42
-调试器使用新断点的内存地址进行响应


但是,当我从调试器运行程序时,它会在与SomeModule.d:42完全不同的地方停止。我遗漏了什么?

D是一种默认安全、默认垃圾收集的语言。 因此,除了您自己的断点之外,程序通常还会被垃圾收集器信号(SIGUSR1、SIGUSR2)中断

在GDB中,这可以通过以下方式防止:

(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
更好的方法是,将上述两个命令放在一个文件中并使用
-xgdb_command_file
启动GDB,从而实现自动化

相应的LLDB ese听起来不同:

(lldb) process handle --stop false --notify false SIGUSR1 SIGUSR2
我确信,使用LLDB实现类似的自动化是可能的