我正在调试一个没有时间戳的应用程序。GDB可以做到这一点吗?如果不能,我该如何在所有消息中添加时间戳,而又不修改源代码中的每个printf(我的应用程序是c ++)?
到目前为止,我最好的方法是在shell上运行它,将输出流式传输到awk,然后将GDB附加到程序上进行调试。不过,我更喜欢GDB内部的某种方式。
GDB可以这样做吗
不容易(如果有的话):GDB不会捕获程序的输出,它只提供对终端的控制,并且程序可以自由打印任何所需的内容。
到目前为止,我最好的方法是在shell上运行它,将输出流式传输到awk,然后将GDB附加到程序上进行调试。不过,我更喜欢GDB内部的某种方式。
您应该能够在GDB中执行awk重定向:
(gdb) run | awk ...
但是请注意,该管道连接(在GDB内或外部)均不起作用:默认情况下,应用程序应检测到其输出将进入管道,并开始进行完全缓冲stdout
(stderr
应保持未缓冲状态)。
为了防止缓冲,您可以致电setvbuf
。
另一个解决方案(对于无法修改应用程序的情况)是使用expect
或unbuffer
,如本答案所示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句