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

标签 c++ c linux ltrace

可执行文件 a.out 加载共享库 1.so2.so3.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/

相关文章:

c++ - 如何在下一个函数调用中从最后一个位置使用 STL 映射删除?

c++ - 并发工厂/轻量级与 TBB

c++ - 堆栈溢出运行时错误c++

c - C Header 在语言上是什么?

c - mode_t 0644 是什么意思?

linux - 本地系统中的远程进程日志

c - 如何仅使用 ioctl 返回 mac 地址 4 十六进制而不是 6 十六进制

linux - 从ubuntu中的程序输出结果中获取特定数据

c++ - 通过自动清理处理中央注册表中的对象

c - 函数返回后esp的值是多少?