可执行文件 a.out
加载共享库 1.so
、2.so
和 3.so
。三个库中的每一个都实现了一个函数func()
。当调用 func()
时,我想确定执行了 func()
的哪个实现。
我在可执行文件的 PID 上尝试了 ltrace
。它只列出了 func()
调用,但没有列出共享库。
有什么建议吗?
最佳答案
使用 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
关于c++ - 如何识别共享库,其功能当前正由可执行文件执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41845554/