繁体   English   中英

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

[英]How to monitor each thread behavior of a multithread (pthread) C++ program on Linux ?

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

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

我想使用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窗口中显示每个线程?

谢谢

标准打印功能(例如printf)不是线程安全的。 如果要记录到stdout或单个文件,则需要将记录功能视为关键部分,并使用互斥锁对其进行保护。 否则,您的日志可能会被交错或混乱。

或者,您可以让每个线程创建自己的日志文件,将线程名称/ id和时间戳记写入每个文件,然后在单独的终端中“尾随”这些日志文件。

  • 确保使用printf进行打印,然后至少将完整打印这些行
  • 确保每个线程使用前缀,例如[MainThread] Log message...
  • 直接输出到文件: your_program > logfile.txt
  • 对于每个线程,请执行以下操作: tail -f logfile.txt | grep <thread_prefix> tail -f logfile.txt | grep <thread_prefix>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM