linux添加gzopen,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

(gdb) print sin

$4 = {} 0xb7701230

(gdb) print gzopen

$5 = {} 0xb720df50

(gdb) print dlopen

$6 = {} 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呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值