首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么gdb不通过sharedlibrady加载libdl?堆轨不起作用

为什么gdb不通过sharedlibrady加载libdl?堆轨不起作用
EN

Stack Overflow用户
提问于 2016-10-23 11:36:52
回答 1查看 652关注 0票数 1

我使用Ubuntu 14.04

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

当堆跟踪shell脚本运行时

代码语言:javascript
复制
 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"

我看到以下错误消息

代码语言:javascript
复制
No symbol "dlmopen" in current context.
No symbol "heaptrack_inject" in current context.

当我手动运行gdb时

代码语言:javascript
复制
gdb -p XXX
(gdb) sharedlibrary libdl

我看到其他错误信息

代码语言:javascript
复制
No loaded shared libraries match the pattern `libdl'.

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

代码语言:javascript
复制
# 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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-23 17:23:04

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

这条信息:

代码语言:javascript
复制
No loaded shared libraries match the pattern `libdl'.

这意味着您的劣等进程(正在调试)不会链接到libdl。您可以在(gdb) info shared中找到您次等的所有库,并确认libdl不在其中。

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

find / -name libdl*.so

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40202455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档