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

Joe*_*Joe 5 c linux debugging gdb gdbserver

我已经在 angstrom linux ARM 板(具有外部访问权限)上安装了 gdb 和 gdbserver,并且正在尝试从我的本地机器上获得共享库的源代码级调试。目前,如果我通过 ssh 进入设备,我可以运行 gdb 并且我能够让一切正常工作,包括设置断点、点击它并进行回溯。

当我尝试使用 gdbserver 执行相同操作并在我的主机上运行 gdb 以完成相同的事情时,我的问题就出现了(最终我希望在 eclipse 中使用它,但在 gdb 中目前已经足够了)。

我注意到,当我只在服务器上使用 gdb 并运行“信息共享”时,它会正确加载符号文件(syms read : yes for all),然后我就可以调试了。我没有这样的运气远程这样做,使用“符号文件”或“目录”或“共享”。它显然看到了文件,但即使我直接指定远程文件,我也无法加载任何符号。关于我接下来可以尝试的任何建议?

Tom*_*mey 4

有几种不同的方法会导致此失败,但典型的方法是 gdb 获取本地文件而不是来自服务器的文件。

还有几种不同的方法可以解决此问题,但迄今为止最简单的方法是在调用之前执行此操作target remote

(gdb) set sysroot remote:
Run Code Online (Sandbox Code Playgroud)

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

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