写入系统调用时的 gdb 捕获点不起作用

gdb catchpoint on write syscall not working

我正在调试我在 GNU/Linux 上的 clang 编译器中发现的问题(已报告 here)。为了找到问题,我需要从 clang 写入输出文件的点向后调试。

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

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

我也设置了断点:

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

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

有一种 "most common" 的可能性,调试 clang 而不是 clang -cc1。驱动程序 re-execs 本身是为了通过捕获生成的程序中的错误来更容易地提供堆栈跟踪和其他东西,如果您正在调试 clang 它将无法设置断点,因为它不会'没有调用任何你有断点的代码。

您可以将 clang 与 -v 一起使用以获得 -cc1 命令行,然后将 gdb --args 设置为该命令行。