我用strace
附加到一个短暂的过程。该进程创建了90个线程。当我发现有问题的线程时,我不得不单调地搜索父线程,然后是祖父线程,等等直到根进程。如何使用strace跟踪子进程?
有没有什么窍门或工具快速找出哪个线程创建了另一个?或者更好的是,打印像pstree
这样的线程创建树?
我用strace
附加到一个短暂的过程。该进程创建了90个线程。当我发现有问题的线程时,我不得不单调地搜索父线程,然后是祖父线程,等等直到根进程。如何使用strace跟踪子进程?
有没有什么窍门或工具快速找出哪个线程创建了另一个?或者更好的是,打印像pstree
这样的线程创建树?
我看不到一个简单的方法:
您可以使用-ff
选项与-o filename
生成多个文件(每个PID一个)。
如:
strace -o process_dump -ff ./executable
grep clone process_dump*
,这将有助于您了解哪些父创建的内容。也许这会帮助你 - 至少你可以向后搜索。
strace -f
跟踪子进程的fork()
版。
有一个叫strace-graph
一个perl脚本。这是一个version from github。它与crosstool-ng版本的编译器一起打包。它适用于我甚至使用跨平台。
$ ./strace -f -q -s 100 -o app.trc -p 449
$ tftp -pr app.trc 172.0.0.133
$ ./strace-graph /srv/tftp/app.trc
(anon)
+-- touch /tmp/ppp.sleep
+-- killall -HUP pppd
+-- amixer set Speaker 70%
+-- amixer set Speaker 70%
+-- amixer set Speaker 70%
+-- amixer set Speaker 70%
+-- amixer set Speaker 50%
+-- amixer set Speaker 70%
`-- amixer set Speaker 50%
输出可用于帮助导航主跟踪日志。
很漂亮,这是几乎一模一样的东西我想至少数天。令人惊讶的是,我甚至可以在我的/ usr/share/doc/strace/examples /中看到它。 – mykhal 2013-12-03 15:59:18