写入系统调用上的 GDB 捕获点不起作用



我正在调试我在GNU/Linux上的clang编译器中发现的一个问题(在这里报告)。 要找到问题所在,我需要从 clang 写入输出文件的位置向后调试。

我尝试在写入系统调用上设置一个捕获点:

(gdb) catch syscall write
Catchpoint 2 (syscall 'write' [1])

我还设置了一个断点:

(gdb) break write
Breakpoint 3 at 0x7ffff6a7c700: write. (2 locations)

但是当我编译一个测试程序时,没有触发断点:gdb 只是正常退出。 我确认它写入了输出文件,因此必须在某处调用写入。 有谁知道我可能在这里做错了什么? 谢谢!

有一种"最常见"的可能性,调试clang而不是clang -cc1。驱动程序会重新执行自身,以便通过捕获生成的程序中的错误来更轻松地提供堆栈跟踪和其他内容,如果您正在调试clang它将无法设置断点,因为它不会调用任何具有断点的代码。

您可以使用 clang 和 -v 来获取 -cc1 命令行,然后将 gdb --args 设置为该命令行。

最新更新