linux – 如何在使用dlopen加载的共享库中创建gdb打印符号?
我想使用GDB调试在
Linux 2.6上运行的进程.附加PID(其中PID是进程ID),print main,print sin,print gzopen和print dlopen work(即它们找到相应的符号).但是打印myfoo不起作用,其中myfoo是使用dlopen从.so文件进程加载的函数.这是我得到的:
(gdb) print main $3 = {int (int,char **)} 0x805ba90 <main> (gdb) print sin $4 = {<text variable,no debug info>} 0xb7701230 <sin> (gdb) print gzopen $5 = {<text variable,no debug info>} 0xb720df50 <gzopen> (gdb) print dlopen $6 = {<text variable,no debug info>} 0xb77248e0 <__dlopen_nocheck> (gdb) print myfoo No symbol "myfoo" in current context. 如何让GDB找到myfoo? 函数myfoo确实存在,因为在程序中我设法使用dlsym获取其地址(在dlopen之后),我设法调用它.只有在那之后我才将GDB附加到流程中. 原来,有一个mydir / mylib.so:没有这样的文件或目录错误消息由GDB的attach $PID命令打印.显然GDB是在错误的目录中启动的.在启动GDB之前做正确的cd修复了问题,打印myfoo开始工作. 我想自动执行此操作:我希望GDB找出我的.so文件(加载dlopen)的位置.我能想到的近似是检查/ proc / $PID / maps(在Linux上),查找可能的目录,并在启动GDB之前将所有目录添加到GDB库搜索路径.扩展LD_LIBRARY_PATH并执行set solib-search-path / tmp / parent不起作用(ls -l /tmp/parent/mydir/myfoo.so确实有效),GDB仍然报告了No such file或directory.我如何告诉GDB在哪里寻找mydir / myfoo.so? 我的另一个问题是如何获取可能的目录列表?在Linux上,/ proc / $PID / maps包含它们 – 但是其他操作系统如FreeBSD和Mac OS X呢? 解决方法
gdb中的“info target”命令将显示所有已加载的共享对象(包括dlopen()ed库)中所有部分的列表.至少这适用于Linux – 我不知道它在其他操作系统上的表现如何.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Linux上的OpenCV(通过python):设置帧宽/高?
- linux – Locate和updatedb不起作用.我该怎么办?
- linux – 不同进程之间的产量
- linux yum命令详解
- linux – crontab中的cronjob条目-e vs / etc / crontab.哪
- linux – 如何版本git和gitolite钩子?
- python – 在pkg-config搜索路径REDHAT6.5中找不到包libff
- 为什么Linux系统调用返回类型“long”?
- 如何使用CURLINFO _ * _ TIME值来估算cURL请求的代理连接时
- linux – 如何测量每台设备的IOwait?