3 回答
TA贡献1775条经验 获得超8个赞
System Tap可以在现代的Linux机器(Fedora 10,RHEL 5等)上使用。
首先下载para-callgraph.stp脚本。
然后运行:
$ sudo stap para-callgraph.stp 'process("/bin/ls").function("*")' -c /bin/ls
0 ls(12631):->main argc=0x1 argv=0x7fff1ec3b038
276 ls(12631): ->human_options spec=0x0 opts=0x61a28c block_size=0x61a290
365 ls(12631): <-human_options return=0x0
496 ls(12631): ->clone_quoting_options o=0x0
657 ls(12631): ->xmemdup p=0x61a600 s=0x28
815 ls(12631): ->xmalloc n=0x28
908 ls(12631): <-xmalloc return=0x1efe540
950 ls(12631): <-xmemdup return=0x1efe540
990 ls(12631): <-clone_quoting_options return=0x1efe540
1030 ls(12631): ->get_quoting_style o=0x1efe540
TA贡献1842条经验 获得超21个赞
假设您可以使用gcc选项重新编译(无需更改源代码)要跟踪的代码-finstrument-functions,则可以使用etrace来获取函数调用图。
输出如下所示:
\-- main
| \-- Crumble_make_apple_crumble
| | \-- Crumble_buy_stuff
| | | \-- Crumble_buy
| | | \-- Crumble_buy
| | | \-- Crumble_buy
| | | \-- Crumble_buy
| | | \-- Crumble_buy
| | \-- Crumble_prepare_apples
| | | \-- Crumble_skin_and_dice
| | \-- Crumble_mix
| | \-- Crumble_finalize
| | | \-- Crumble_put
| | | \-- Crumble_put
| | \-- Crumble_cook
| | | \-- Crumble_put
| | | \-- Crumble_bake
在Solaris上,truss(等效于strace)可以过滤要跟踪的库。当我发现strace不具备这种功能时,我感到很惊讶。
- 3 回答
- 0 关注
- 643 浏览
添加回答
举报