c++ - 为什么 gdb 不通过 sharedlibrady 加载 libdl? heaptrack 不工作

标签 c++ gdb shared-libraries dll-injection

我使用的是 Ubuntu 14.04

我尝试使用 https://github.com/KDE/heaptrack用于检测正在运行的 C++ 程序中的内存泄漏

heaptrack shell脚本运行时

 gdb --batch-silent -n -iex="set auto-solib-add off" -p $pid \
   --eval-command="sharedlibrary libdl" \
   --eval-command="call (void) dlmopen(0x00, \"$LIBHEAPTRACK_INJECT\", 0x002)" \
   --eval-command="sharedlibrary libheaptrack_inject" \
   --eval-command="call (void) heaptrack_inject(\"$pipe\")" \
   --eval-command="detach"

我看到以下错误消息

No symbol "dlmopen" in current context.
No symbol "heaptrack_inject" in current context.

当我手动运行 gdb 时

gdb -p XXX
(gdb) sharedlibrary libdl

我看到其他错误信息

No loaded shared libraries match the pattern `libdl'.

但 libdl.so 存在于我的文件系统中

# find / -name libdl*.so
/usr/lib/debug/lib/x86_64-linux-gnu/libdl-2.19.so
/usr/lib/x86_64-linux-gnu/libdl.so
/lib/x86_64-linux-gnu/libdl-2.19.so

为什么 gdb 不通过 sharedlibrary 命令加载 libdl?

最佳答案

Why gdb don't load libdl over sharedlibrary command ?

这条消息:

No loaded shared libraries match the pattern `libdl'.

表示您的劣质(正在调试)进程未链接到 libdl。你可以找到你的下属有(gdb) info shared所有库,并确认libdl不在其中。

GDB 本身不会修改加载库的集合。

find / -name libdl*.so

无关紧要libdl.so 存在,但这并不意味着每个进程都会加载它(您的进程不会)。

关于c++ - 为什么 gdb 不通过 sharedlibrady 加载 libdl? heaptrack 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40202455/

相关文章:

c++ - 构造函数的链接时自动注册

c - 用于解析 linux 配置文件的库?

c++ - 双数的位表示

c++ - 使用 Boost::Test 并行代码

c++ - 通过引用传递 vector - 段错误 C++

C程序的命令行输入(使用Perl的 'print'命令)

.net - 类库中的 SignalR 集线器?这是好主意还是坏主意?

c++ - Dijkstra 算法 - 优先队列中的比较

gdb - 监控linux动态库

gdb - 如何调试在 dlopen()'ed 插件中中止的核心转储?