ltrace 不会将所有调用都显示到库中

问题描述

我正在 x86 上使用专有的 3rd 方库在 Ubuntu Linux 上工作。这个库使用线程。它是一个带有 C++ 包装器的 C 库,但只记录了 C++ API,并且给定的示例程序仅使用 C++ API - 但是,我想使用 C API。由于大多数(甚至全部?)C++ 代码似乎都在头文件中,因此我可以查找“幕后”进行的 C 调用并编写我的 C 代码。不幸的是,有些东西在我的代码中不起作用,所以我尝试 ltrace 示例程序以准确查看 C 调用内容和顺序:

ltrace -f -l lib3rdparty.so ./ExampleProgram ExampleArgs

然而,它只显示了一些 C 调用,而不是全部。实际上看起来这些调用甚至不是从 C++ 接口进行的(根据 gdb 至少其中一个是由 C API 函数之一在内部进行的)。 lib3rdparty.so 没有符号表:

$ file lib3rdparty.so
lib3rdparty.so: : ELF 64-bit LSB shared object,x86-64,version 1 (GNU/Linux),dynamically linked,BuildID[sha1]=d29867259007394a1f532720c2073578b27a41e5,stripped

为什么 ltrace 不显示所有调用,只显示一些调用?我需要启用某些东西吗?我将尝试从 gdb 会话中收集 C 调用,但是在建立网络连接时,恐怕会遇到超时。还有其他方法可以记录对特定库进行的调用吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...