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

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

我已经确保使用 -g 标志(添加符号调试信息)构建我的 D 程序,看起来我可以像这样在 GDB 和 LLDB 中设置简单的 LOC 断点:b SomeModule.d:42 - 调试器回复新断点的内存地址。

然而,当我 run 来自调试器的程序时,它在与 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

更好的是,通过将上述 2 个命令放在一个文件中并使用 -x gdb_command_file.

启动 GDB 来实现自动化

对应的LLDB-ese发音不同:

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

我是 not sure it's possible to automate it similarly with LLDB alone