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

C++ 如何让GDB为每行输出显示一个时间戳?,c++,gdb,C++,Gdb,我正在调试一个应用程序,它的输出没有时间戳。GDB能做到这一点吗?如果不能的话,在不修改源文件中的每个printf(我的应用程序是c++)的情况下,我该如何向所有消息添加时间戳 到目前为止,我得到的最好的方法是在shell上运行它,将输出流式传输到awk,然后将GDB附加到程序以进行调试。然而,我更喜欢GDB内部的一些方式 GDB能做到这一点吗 不容易(如果有的话):GDB不捕获程序的输出,它只是让它控制终端,程序可以自由打印它想要的任何东西 到目前为止,我得到的最好的方法是在shell上运行它

我正在调试一个应用程序,它的输出没有时间戳。GDB能做到这一点吗?如果不能的话,在不修改源文件中的每个printf(我的应用程序是c++)的情况下,我该如何向所有消息添加时间戳

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

GDB能做到这一点吗

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

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

您应该能够在GDB中执行awk重定向:

(gdb) run | awk ...
但是请注意,这个管道也不应该工作(在GDB内部或外部):默认情况下,应用程序应该检测到它的输出将进入管道,并开始在
stdout
上执行完全缓冲(stderr应该保持无缓冲)

要防止缓冲,可以调用
setvbuf

另一种解决方案(对于无法修改应用程序的情况)是使用
expect
unbuffer
,如中所示

GDB能做到这一点吗

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

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

您应该能够在GDB中执行awk重定向:

(gdb) run | awk ...
但是请注意,这个管道也不应该工作(在GDB内部或外部):默认情况下,应用程序应该检测到它的输出将进入管道,并开始在
stdout
上执行完全缓冲(stderr应该保持无缓冲)

要防止缓冲,可以调用
setvbuf


另一种解决方案(对于无法修改应用程序的情况)是使用
expect
unbuffer
,如中所示。

您可以通过一个脚本来管道输出,该脚本在每行换行后打印时间戳。我提到了从shell运行它,因为这是我知道的唯一管道输出的方法。如何在GDB中进行管道输出?可以在shell中运行管道命令,然后在程序启动后将GDB附加到程序。