pts*_*pts 10 linux gdb shared-libraries
我想使用GDB调试在Linux 2.6上运行的进程.attach PID(其中,PID是进程ID), ,,print main 和工作(即,他们发现各个符号).但是不起作用,从文件使用的进程加载的函数在哪里.这是我得到的:print sinprint gzopenprint dlopenprint myfoomyfoo.sodlopen
(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.
Run Code Online (Sandbox Code Playgroud)
如何找到GDB myfoo?
该功能myfoo确实存在,因为在程序中我设法使用dlsym(之后dlopen)获取其地址,并设法调用它.只有在那之后我才将GDB附加到流程中.
原来,GDB mydir/mylib.so: No such file or directory的attach $PID命令打印出一条错误消息.显然GDB是在错误的目录中启动的.cd在启动GDB之前做正确的事情解决了问题,并print 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 or directory.我如何告诉GDB在哪里寻找mydir/myfoo.so?
我的另一个问题是如何获取可能的目录列表?在Linux上,/proc/$PID/maps包含它们 - 但是像FreeBSD和Mac OS X这样的其他操作系统呢?
| 归档时间: |
|
| 查看次数: |
11549 次 |
| 最近记录: |