如何在Linux上监视多线程(pthread)C ++程序的每个线程行为?

时间:2012-01-26 05:08:44

标签: c++ linux multithreading debugging pthreads

我在Linux上运行多线程(pthread)C ++程序(redhat)。

我想跟踪正在运行的程序的行为,但是线程的打印输出相互交错。很难找出每个线程的行为。

我想使用DDD(gdb GUI)来分析程序的行为,但是当我安装“motif”时,它需要“motif”,这有错误:

cc -c -O -I ../../ include -I ../../ imports / x11 / include / X11 ./ccimake imake.c imake.c:162:21:错误:Xosdefs.h:没有这样的文件或目录

我还使用了helgrind和drd工具,但是有很多纯文本打印输出,这使得每个线程的行为混乱。

请您推荐更好的开源工具,帮助我清楚,轻松地调试和分析/监控多个pthread的行为?

是否可以在不同的终端xterm窗口中显示每个线程,而不是将所有线程混合在一起?

谢谢

2 个答案:

答案 0 :(得分:1)

printf等标准打印功能不是线程安全的。如果要登录到stdout或单个文件,则需要将日志记录功能视为关键部分,并使用互斥锁保护它们。否则,您的日志可能会交错或无序。

或者,您可以让每个线程创建自己的日志文件,为每个文件写入线程名称/ ID和时间戳,以及" tail"那些日志文件在不同的终端中。

答案 1 :(得分:0)

  • 请务必使用printf进行打印,然后至少打印完整的行
  • 确保每个帖子都使用前缀,例如[MainThread] Log message...
  • 直接输出到文件:your_program > logfile.txt
  • 对于每个帖子,请执行:tail -f logfile.txt | grep <thread_prefix>