如何识别共享库,其功能当前正由可执行文件执行

时间:2017-01-25 07:15:15

标签: c++ c linux ltrace

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

使用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 perf:

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