我怎么可以把一个断点“的东西被打印到终端”在gdb?(how can I put a breakpo

2019-07-21 11:54发布

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

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

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

Answer 1:

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

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

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

此硬件平台之间的差别很大。



Answer 2:

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

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

$ EBX包含第一系统调用的参数 - FD数这里



文章来源: how can I put a breakpoint on “something is printed to the terminal” in gdb?