我在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窗口中显示每个线程,而不是将所有线程混合在一起?
谢谢
答案 0 :(得分:1)
printf等标准打印功能不是线程安全的。如果要登录到stdout或单个文件,则需要将日志记录功能视为关键部分,并使用互斥锁保护它们。否则,您的日志可能会交错或无序。
或者,您可以让每个线程创建自己的日志文件,为每个文件写入线程名称/ ID和时间戳,以及" tail"那些日志文件在不同的终端中。
答案 1 :(得分:0)
printf
进行打印,然后至少打印完整的行[MainThread] Log message...
your_program > logfile.txt
tail -f logfile.txt | grep <thread_prefix>