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

why gdb don't load libdl over sharedlibrady ? and heaptrack not working

我用Ubuntu14.04

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

当 heaptrack shell 脚本 运行ning

 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'.

表示您的劣质(正在调试)进程不会link反对libdl。你可以用(gdb) info shared找到你的下级拥有的所有个库,并确认libdl不在其中。

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

find / -name libdl*.so

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