gdb:加载共享库的符号表 solib-search-path

原文地址::http://blog.chinaunix.net/uid-29065085-id-4703912.html


相关文章

1、set solib-search-path command----http://visualgdb.com/gdbreference/commands/set_solib-search-path



原文网址:http://visualgdb.com/gdbreference/commands/set_solib-search-path

set solib-search-path command

Specifies directories where GDB will search for shared libraries with symbols. This option is useful when debugging with gdbserver.

Syntax
set solib-search-path [ Directories]
show solib-search-path


Parameters
Directories Specifies the list of directories separated by colon (:) on Linux or semicolon (;) on Windows where GDB will look for shared libraries when searching for symbols.


Typical use

This command is useful when debugging remote programs via gdbserver. If the shared library path on the remote computer and the GDB computer is different, GDB won't automatically find the local copy of the library and load its symbols unless the directory containing it is specified in set solib-search-path.

E.g. if you have copied /home/testuser/libtest/libTest.so on the computer with GDB to /tmp/libTest.so on the computer with GDBServer, you will need to specify set solib-search-path /home/testuser/libtest in order to get the symbols loaded.


Default value

The default value for the solib-search-path variable is "." that corresponds to the working directory of GDB (directory where GDB was launched unless changed using the cd command).


Examples

In this example we will debug a simple shared library with gdbserver:

#include  

int func()
{
    printf( "In func()\n");
     return 0;
}


We will use a simple program to test our library:

#include  

int func();

int main()
{
    printf( "In main()\n");
    func();
     return 0;
}


First, we build the application and the library and deploy it to another machine:

cd /home/testuser/libtest
g++ -ggdb -fPIC -shared lib.cpp -o libTest.so
g++ -ggdb main.cpp libTest.so -o testApp -Wl,--rpath='$ORIGIN'
scp testApp libTest.so deploy_machine:/tmp


Then we run gdbserver on the deploy_machine machine:

cd /tmp
gdbserver :2000 testApp


Finally we run GDB from a different directory (otherwise it will still find libTest.so):

cd /
gdb /home/testuser/libtest/testApp


Now we will try to set a breakpoint inside libTest.so (that will fail as /tmp/libTest.so is not initially loaded). Note how specifying set solib-search-path allows GDB load the symbols and set a breakpoint:

(gdb)  target remote deploy_machine:2000
Remote debugging using deploy_machine:2000
Reading symbols from /lib/ld-linux.so.2...
Reading symbols from /usr/lib/debug/lib/i386-linux-gnu/ld-2.15.so...done.
done.
Loaded symbols for /lib/ld-linux.so.2
(gdb)  break main
Breakpoint 1 at 0x80484ed: file main.cpp, line 7.
(gdb)  continue
Continuing.
Breakpoint 1, main () at main.cpp:7
7 printf("In main()\n");
(gdb)  break test
Function "test" not defined.
Make breakpoint pending on future shared library load? (y or [n]) n
(gdb)  info sharedlibrary 
warning: Could not load shared library symbols for /tmp/libTest.so.
Do you need "set solib-search-path" or "set sysroot"?
From To Syms Read Shared Object Library
0x0019b820 0x001b3b9f Yes /lib/ld-linux.so.2
No /tmp/libTest.so
0x004bcf10 0x005f15cc No /lib/i386-linux-gnu/libc.so.6
(gdb)  set solib-search-path /home/testuser/libtest
Reading symbols from /home/testuser/libtest/libTest.so...done.
Loaded symbols for /home/testuser/libtest/libTest.so
Reading symbols from /lib/i386-linux-gnu/libc.so.6...
Reading symbols from /usr/lib/debug/lib/i386-linux-gnu/libc-2.15.so...done.
done.
Loaded symbols for /lib/i386-linux-gnu/libc.so.6
(gdb)  info sharedlibrary 
From To Syms Read Shared Object Library
0x0019b820 0x001b3b9f Yes /lib/ld-linux.so.2
0x00f893a0 0x00f894c8 Yes /home/testuser/libtest/libTest.so
0x004bcf10 0x005f15cc Yes /lib/i386-linux-gnu/libc.so.6
(gdb)  break func
Breakpoint 2 at 0xf8946e: file lib.cpp, line 5.
(gdb)  continue
Continuing.

Breakpoint 2, func () at lib.cpp:5
5 printf("In func()\n");
(gdb)  backtrace 
#0 func () at lib.cpp:5
#1 0x080484fe in main () at main.cpp:8



Compatibility with VisualGDB

VisualGDB automatically configures search paths using the set solib-search-path command when you debug your Linux or Android projects with Visual Studio. Nonetheless you can issue the command manually as well using the GDB Session window.


  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值