使用gdbserver调试远程库文件

我的需求,有一个项目,程序由一个主程序和一堆动态库组成,运行在目标机上,希望能够在开发机上进行远程调试。

于是想到了使用gdbserver来调试,中间碰到一些问题,记录下来

1.demo程序

创建了一个demo程序来模拟,由主程序和动态库两个文件夹,开发机上的目录结构如下

--proj

|---exemain

----exemain.cpp

----|Debug

----|----exemain

|---dlla

----dlla.cpp

----|Debug

----|---libdlla.so

其中exemain调用dlla里的函数mymax

将可执行文件exemain和libdlla.so拷贝到目标机上,确认可以执行

2.目标机上使用gdbserver

在目标机上执行gdbserver :1234 ./exemain  其中1234是端口号

3.在开发机上调试

#cd proj/exemain/Debug

#gdb -q ./exemain

(gdb) target remote 172.103.1.59:1234

(gdb) b main

(gdb) c

(gdb) i shared

(gdb) set solib-search-path ../../dlla/Debug/

(gdb) b mymax


尤其需要注意的是,先在mian处打断点,并且运行到main之后再去设置solib-search-path ,然后再在dlla中的函数上打断点,否则显示的断点并没有源文件行数,推测大概是只有运行进了main之后才会发现dlla库并加载,使用set solib-search-path时才会加载符号和源文件行号,再去打断点才能找到。

4.使用eclipse

目前使用eclipse也存在问题,如果直接使用远程调试的话还是无法进入库文件的源文件中调试,需要在终端中手动输入。

5.在之前gdb成功的基础上具体说一下eclipse怎么配置

工作空间设在proj下,下面有两个项目dlla和exemain。

选中exemain,选择调试下面的调试-配置

双击c/c++ remote application会出现远程调试的设置选项,

填写名称

connection后新建,选ssh only,下一步填写主机名,连接名,下一步

选择c/c++程序后面的搜索项目,选中debug/exemain

在remote absolute file path for c/c++ application后面的浏览中,选中目标机上的可执行文件,需要填写目标机的用户名密码

然后点应用,就可以调试了

但是在调试中还是只能在exemain工程中打断点。如果要在dlla上打断点,需要在gdb终端中手工输入

set solib-search-path ../../dlla/Debug/

然后输入b mymax

再就可以用eclipse调试了

 

 

 

你可能感兴趣的:(使用gdbserver调试远程库文件)