如何让GDB为每一行输出显示时间戳?

时间:2014-09-15 20:37:12

标签: c++ gdb

我正在调试一个没有给它输出时间戳的应用程序。 GDB可以做到这一点,如果没有,我怎么可能为所有消息添加时间戳,没有修改源中的每个printf(我的应用程序是用c ++)?

我到目前为止最好的是在shell上运行它,将输出流式传输到awk,然后将GDB附加到程序进行调试。不过,我更喜欢GDB内部的一些方式。

1 个答案:

答案 0 :(得分:1)

  

GDB可以这样做吗

不容易(如果有的话):GDB不捕获程序的输出,它只是让它控制终端,程序可以随意打印它想要的任何内容。

  

我到目前为止最好的是在shell上运行它,将输出流式传输到awk,然后将GDB附加到程序进行调试。不过我更喜欢GDB内部的一些方式。

你应该能够在GDB中进行awk重定向:

(gdb) run | awk ...

但是请注意,此管道不应该工作(在GDB内部或外部):默认情况下,应用程序应检测到其输出是否发送到管道,并开始在stdout上执行完全缓冲({ {1}}应保持无缓冲状态。

为防止缓冲,您可以拨打stderr

替代解决方案(对于无法修改应用程序的情况),使用setvbufexpect,如this answer