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

2024-01-22

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

当我尝试使用 gdbserver 做同样的事情并在我的主机上运行 gdb 来完成同样的事情时,我的问题就出现了(最终我想在 eclipse 中完成这个工作,但目前在 gdb 中已经足够好了)。

我注意到,当我在服务器上使用 gdb 并运行“信息共享”时,它会正确加载符号文件(符号读取:全部是),然后我就可以对其进行调试。我没有这样的运气远程这样做,使用“符号文件”或“目录”或“共享”。它显然看到了文件,但我无法让它加载任何符号,即使我直接指定远程文件也是如此。关于我下一步可以尝试什么有什么建议吗?


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

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

(gdb) set sysroot remote:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐