我想从内部的巨大的被打印,其中应用某个消息就知道了。该应用程序是如此之大,老,它使用文本打印到终端的所有可能的方式;例如printf()的,fprintf中(标准输出,...)等等。

我写把一个断点在write()系统调用,但然后我用,因为各种文件使用write(I / O操作的太多断点停止淹没)为好。

所以基本上我想用gdb停止每当程序打印一些东西到终端,但在同一时间,我不想GDB停止时,程序写的东西到一个文件中。

有帮助吗?

解决方案

使用条件断点,检查第一个参数。在64位x86系统的条件将是:

(GDB)b记录如果1 == $ RDI

在32位系统中,这是比较复杂的,因为该参数是在栈上,这意味着你需要ESP投$为int *和指数的FD参数。在该点的堆叠具有返回地址,长度,缓冲器和最后的fd。

此硬件平台之间变化很大。

其他提示

使用GDB 7.0,则可以设置在系统调用写条件断点():

(gdb) catch syscall write
Catchpoint 1 (syscall 'write' [4])
(gdb) condition 1 $ebx==1

$ EBX包含第一系统调用参数 - 此处FD数目

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top