weichuang02 发表于 2013-05-22 10:05

[结贴]strace似乎不能跟踪多线程程序啊?

本帖最后由 weichuang02 于 2013-05-31 09:34 编辑

我的一个正在开发的程序是多线程的,里面很多pthread的东西。运行几个小时之后出了问题,因此我想用strace来跟踪进程的运行。

进程重启后,我strace -p <进程pid>
然后打印了3行以后,就没有别的内容了:
strace -p 24091
Process xxx attached - interrupt to quit
[ Process PID=24091 runs in 32 bit mode. ]
futex(0xc5bbbd8, FUTEX_WAIT, 24215 NULL


然后就再也没有输出了。我用的是RHEL6.3。难到多线程的程序,系统调用就不能跟踪?

linux_c_py_php 发表于 2013-05-22 10:42

top -H找到你想跟踪的线程PID, 然后strace -p那个PID。

weichuang02 发表于 2013-05-22 11:44

linux_c_py_php 发表于 2013-05-22 10:42 static/image/common/back.gif
top -H找到你想跟踪的线程PID, 然后strace -p那个PID。、

top命令显示的进程号啊,不是线程的。

linux_c_py_php 发表于 2013-05-22 12:53

weichuang02 发表于 2013-05-22 11:44 static/image/common/back.gif


top命令显示的进程号啊,不是线程的。

看看-H是干嘛的。

cxytz01 发表于 2013-05-22 15:18

方法一:
strace -fp pid , 可以跟踪所有线程, 进程的系统调用。strace -p 24091
Process xxx attached - interrupt to quit
[ Process PID=24091 runs in 32 bit mode. ]
futex(0xc5bbbd8, FUTEX_WAIT, 24215 NULL你的问题不是strace不能跟踪,而是你的线程锁住了。 futex应该是内核里对pthread_mutex_lock实现的一个函数。

方法二(本质同方法一,但更明了):
pstree -p pid 可以查看多线程程序的进程树。
在针对各个线程,逐个的strace -p pid

最后
man pstack
pstack - print a stack trace of a running process
相当于gdb内的bt,打出栈信息。

helpstudy 发表于 2013-05-28 23:45

用gdb打断点调试一下,看看各个线程栈信息

weichuang02 发表于 2013-05-29 18:29

cxytz01 发表于 2013-05-22 15:18 static/image/common/back.gif
方法一:
strace -fp pid , 可以跟踪所有线程, 进程的系统调用。你的问题不是strace不能跟踪,而是你的线程 ...

确实是有一个锁
页: [1]
查看完整版本: [结贴]strace似乎不能跟踪多线程程序啊?