solib-absolute-prefix 和solib-search-path的区别

solib-absolute-prefix 和solib-search-path是 gdb比较常用的选项,用来设置符号文件的位置。

那么,它们有什么区别呢?

solib-absolute-prefix设置的是被搜索文件路径的前缀,solib-search-path设置的是被搜索文件的路径。

solib-search-path可以有多个路径,中间按用:隔开, solib-absolute-prefix的值只能有一个。

下面以一个例子说明。

先载入一个 core dump文件:

  1. (gdb) core-file core   
  2. [New LWP 489]  
  3. warning: Could not load shared library symbols for 2 libraries, e.g. /mnt/libshared.so.  
  4. Use the "info sharedlibrary" command to see the complete listing.  
  5. Do you need "set solib-search-path" or "set sysroot"?  
  6. Core was generated by `./main'.  
  7. Program terminated with signal 11, Segmentation fault.  
  8. #0  0x2ac02508 in ?? ()  
先执行下 info sharedlibrary:

  1. (gdb) info sharedlibrary   
  2. From        To          Syms Read   Shared Object Library  
  3.                         No          /mnt/libshared.so  
  4.                         No          /lib/libc.so.6  
  5. 0x2ab417e0  0x2ab52bf0  Yes (*)     /home/charles/code/gcc-arm-2012.04-linux/arm-linux-gnueabi/libc/lib/ld-linux.so.3  
  6. (*): Shared library is missing debugging information.  
有两个动态库还没有载入。

假设当前目录下有文件 libshared.so, 可以执行下面的命令:

  1. (gdb) set solib-search-path .  
  2. Reading symbols from /home/charles/libshared.so...done.  
  3. Loaded symbols for /home/charles/libshared.so  

再看下动态库的加载情况:

  1. (gdb) info sharedlibrary   
  2. From        To          Syms Read   Shared Object Library  
  3. 0x2ac0240c  0x2ac02510  Yes         /home/charles/libshared.so  
  4.                         No          /lib/libc.so.6  
  5. 0x2ab417e0  0x2ab52bf0  Yes (*)     /home/charles/code/gcc-arm-2012.04-linux/arm-linux-gnueabi/libc/lib/ld-linux.so.3  
  6. (*): Shared library is missing debugging information.  

还有一个没有载入。

假设文件 libc.so.6在 /media/DATA/lib/libc.so.6下:

  1. ~$ ls /media/DATA/lib/ -l  
  2. total 860  
  3. -rw------- 1 charles charles 876656 Nov 18 03:56 libc.so.6  

这时,可以用 solib-absolute-path。

  1. (gdb) set solib-absolute-prefix /media/DATA  
  2. Reading symbols from /media/DATA/lib/libc.so.6...(no debugging symbols found)...done.  
  3. Loaded symbols for /media/DATA/lib/libc.so.6  

这时,gdb用前缀 /media/DATA + /lib/libc.so.6,就找到了文件。

 /lib 是可执行文件在 目标机上  link libc.so.6的位置。

  1. (gdb) bt full  
  2. #0  0x2ac02508 in fun () at testsharedlib.c:3  
  3. No locals.  
  4. #1  0x00008570 in main () at main.c:6  
  5. No locals.  
  6. (gdb) l *0x2ac02508  
  7. 0x2ac02508 is in fun (testsharedlib.c:3).  
  8. 1   void fun(void)  
  9. 2   {  
  10. 3       *(int *)0 = 0;  
  11. 4   }  
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值