如何使用gdb和gdbserver加载共享库符号以进行远程源级调试?

时间:2014-08-15 21:11:56

标签: c linux debugging gdb gdbserver

我已经在一个非常好的Linux ARM板上安装了gdb和gdbserver(有外部访问),我正在尝试从我的本地机器上获取共享库的源代码级调试。目前,如果我进入设备,我可以运行gdb,我可以使一切正常工作,包括设置断点,点击它并进行回溯。

当我尝试使用gdbserver并在我的主机上运行gdb以完成同样的事情时,我的问题就出现了(最终我想在eclipse中使用它,但是在gdb中它已经足够了力矩)。

我注意到当我在服务器上使用gdb并运行“info shared”时,它会正确加载符号文件(syms读取:所有人都是),然后我就可以调试了。我没有这么好运,使用“symbol-file”或“directory”或“shared”。它显然看到了文件,但即使直接指定远程文件,我也无法加载任何符号。关于我接下来可以尝试什么的任何建议?

2 个答案:

答案 0 :(得分:4)

有几种不同的方法可以使其失败,但典型的方法是让gdb从服务器获取本地文件而不是文件。

还有一些不同的方法可以解决这个问题,但到目前为止最简单的方法是在调用target remote之前执行此操作:

(gdb) set sysroot remote:

这告诉gdb从远程系统获取文件。如果你有调试信息(我从你收到的帖子中收集),那么一切正常。

这种方法的典型问题是它需要从远程复制数据。如果你的链接不好,这可能会很痛苦。在这种情况下,您可以在本地保留数据的副本,并将sysroot指向副本。但是,这需要注意保持同步。

答案 1 :(得分:0)

首先运行到main,然后set solib-search-path .否则,gdbserver在动态加载程序中停止,然后才能加载库。更多详情请见:Debugging shared libraries with gdbserver