我想从一个巨大的应用程序中打印某个消息从哪里知道的。 该应用程序是如此之大,老,它使用文本打印到终端的所有可能的方式; 例如printf()的,fprintf中(标准输出,......)等。
我写把一个断点在write()系统调用,但然后我用,因为各种文件使用write(),以及I / O操作的太多断点停止淹没。
所以基本上我想用gdb停止每当程序打印一些东西到终端,但在同一时间,我不想GDB停止时,程序写的东西到一个文件中。
我想从一个巨大的应用程序中打印某个消息从哪里知道的。 该应用程序是如此之大,老,它使用文本打印到终端的所有可能的方式; 例如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数这里