【问题标题】:How to load shared libraries symbols for remote source level debugging with gdb and gdbserver?如何使用 gdb 和 gdbserver 加载共享库符号以进行远程源级调试?
【发布时间】:2014-10-09 15:41:01
【问题描述】:

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

当我尝试使用 gdbserver 并在我的主机上运行 gdb 以完成相同的事情时,我的问题就出现了(最终我想在 eclipse 中让它工作,但在 gdb 中对于时刻)。

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

【问题讨论】:

标签: c linux debugging gdb gdbserver


【解决方案1】:

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

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

(gdb) set sysroot remote:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-01-26
      • 2011-06-12
      • 2015-07-28
      • 2014-02-09
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多