为了账号安全,请及时绑定邮箱和手机立即绑定

跟踪Linux中本地函数调用的工具

跟踪Linux中本地函数调用的工具

动漫人物 2019-10-14 15:21:39
我正在寻找可以跟踪可执行文件中本地定义的函数的ltrace或strace之类的工具。ltrace仅跟踪动态库调用,而strace仅跟踪系统调用。例如,给定以下C程序:#include <stdio.h>int triple ( int x ){  return 3 * x;}int main (void){  printf("%d\n", triple(10));  return 0;}使用来运行程序ltrace将显示对的调用,printf因为这是标准库函数(在我的系统上是动态库),并且strace将显示启动代码,用于实现printf的系统调用以及关闭代码的所有系统调用。 ,但是我想要让我知道该函数triple已被调用的东西。假设优化编译器未内联局部函数,并且二进制文件未剥离(删除符号),是否有工具可以做到这一点?编辑一些澄清:如果该工具还提供非本地功能的跟踪信息,也可以。我不想在支持特定工具的情况下重新编译程序,可执行文件中的符号信息就足够了。如果可以像使用ltrace / strace一样使用该工具附加到现有进程,我将非常好。
查看完整描述

3 回答

?
www说

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


查看完整回答
反对 回复 2019-10-14
?
茅侃侃

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不具备这种功能时,我感到很惊讶。


查看完整回答
反对 回复 2019-10-14
  • 3 回答
  • 0 关注
  • 643 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信