我使用Ubuntu 14.04
我尝试使用https://github.com/KDE/heaptrack检测正在运行的C++程序中的内存泄漏。
当堆跟踪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?
发布于 2016-10-23 17:23:04
为什么gdb不通过sharedlibrary命令加载libdl?
这条信息:
No loaded shared libraries match the pattern `libdl'.这意味着您的劣等进程(正在调试)不会链接到libdl。您可以在(gdb) info shared中找到您次等的所有库,并确认libdl不在其中。
GDB本身不会修改加载的库集。
find / -name libdl*.so
这是无关紧要的。libdl.so存在,但这并不意味着每个进程都加载它(您的进程没有)。
https://stackoverflow.com/questions/40202455
复制相似问题