如何在gdb中的“某些东西被打印到终端”上放置一个断点?

我想知道从一个巨大的应用程序的内部打印某个消息.该应用程序是如此之大和老,它使用所有可能的方式将文本打印到终端;例如printf(),fprintf(stdout,…)等

我写的是在write()系统调用上放置一个断点,但是由于使用write()的各种文件I / O操作,我被淹没了太多的断点停止.

所以基本上我希望gdb停止每当程序打印一些东西到终端,但同时我不希望gdb停止时程序写入一个文件.

最佳答案
使用检查第一个参数的条件断点.在64位x86系统上,条件是:

(gdb)b写如果1 == $rdi

在32位系统上,由于参数在堆栈上,所以它更复杂,这意味着您需要将$esp转换为int *并对fd参数进行索引.此时的堆栈具有返回地址,长度,缓冲区和最后的fd.

硬件平台之间的差异很大.

转载注明原文:如何在gdb中的“某些东西被打印到终端”上放置一个断点? - 代码日志