c++ - 如何让 GDB 显示每行输出的时间戳?

标签 c++ gdb

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

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

最佳答案

Can GDB do this

不容易(如果有的话):GDB 不会捕获程序的输出,它只是赋予它对终端的控制权,并且程序可以自由地打印它想要的任何内容。

The best I've got so far is to run it on the shell, streaming the output to awk, and then attaching GDB to the program to debug. I'd prefer some way inside of GDB however.

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

(gdb) run | awk ...

但请注意,此管道不应工作(在 GDB 内部或外部):默认情况下,应用程序应检测到其输出将进入管道,并开始在 stdout 上进行完全缓冲(stderr 应保持无缓冲状态)。

要防止缓冲,您可以调用setvbuf

另一种解决方案(对于无法修改应用程序的情况)是使用 expectunbuffer,如 this answer .

关于c++ - 如何让 GDB 显示每行输出的时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25856496/

相关文章:

c++ - 什么是节点句柄?

c++ - 是否有任何函数可用于将 c++ 编程中的流程替代 while 或 do while 循环?

c - 函数中返回静态数组时出现段错误

linux - gdb 核心转储 : "value has been optimized out"

c++ - C代码——需要说明有效性

c++ - UDP/TCP 服务器中监听器线程与工作线程的比率?

c++ - 制作 C++ 哈希表的最佳策略,线程安全

docker - 如果它是基于非sudo基本镜像构建的,是否可以将docker容器作为sudo运行?

c++ - 为什么 C++ 标准没有提到 __STDC_IEC_559__?

linux - 如何获得调试postgres的权限?