我正在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窗口中显示每个线程,而不会将所有线程混合在一起?
谢谢
发布于 2012-02-25 19:08:26
像printf这样的标准打印函数不是线程安全的。如果您要登录到stdout或单个文件,则需要将日志记录函数视为临界区,并使用互斥锁保护它们。否则,您的日志可能会交错或乱序。
或者,您可以让每个线程创建自己的日志文件,将线程名/id和时间戳写入每个文件,并在不同的终端中“跟踪”这些日志文件。
发布于 2012-01-26 16:39:39
printf进行打印,然后至少可以完整打印各行your_program > logfile.txtprintf,do:https://stackoverflow.com/questions/9014180
复制相似问题