使用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实现类似的自动化是可能的