【问题标题】:How to identify the shared library, whose functions are currently being executed by an executable如何识别共享库,其功能当前由可执行文件执行
【发布时间】:2017-01-25 07:15:14
【问题描述】:

一个可执行文件a.out 加载共享库1.so2.so3.so。三个库中的每一个都实现了一个函数func()。当func()被调用时,我想确定,func()的哪个实现被执行了。

我在可执行文件的 PID 上尝试了ltrace。它只列出了func() 调用,而不是共享库。

有什么建议吗?

【问题讨论】:

标签: c++ c linux ltrace


【解决方案1】:

使用 systemtap:

probe process("/path/to/1.so").function("func")
{
  printf("%d: 1.so\n", pid());
}       

probe process("/path/to/2.so").function("func")
{
  printf("%d: 2.so\n", pid());
}       

probe process("/path/to/3.so").function("func")
{
  printf("%d: 3.so\n", pid());
}       

使用它:

sudo -E stap ./func.stap

使用 linux 性能:

sudo perf probe -x /path/to/1.so func
sudo perf probe -x /path/to/2.so func
sudo perf probe -x /path/to/3.so func
sudo perf top -e probe_1:func,probe_2:func,probe3:func

【讨论】:

    猜你喜欢
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 2019-11-16
    • 2020-06-06
    相关资源
    最近更新 更多