0

当然,在 C/C++ 程序中定义的每个变量的符号和类型信息都是可用的,否则调试器无法显示它们。但是如何访问这些信息?

有很多关于精灵的信息可用,但那是关于链接似乎只包含全局变量,而不是堆栈上的本地变量,即

在远程实时系统中(不是在 unix 下),我希望能够不时通过复制列表中的一些内存以及相关的变量名来查看它们,然后在 RT 系统中查看它们继续。

最好的办法是可以随时为任何变量引入转储,而无需预先在代码中添加一些语句。

4

1 回答 1

1

但是如何访问这些信息?

TL;DR:这很复杂。

您将需要构建几乎完整的调试器。你可以看这个空间。当作者开始执行第 9 步时,您将有一个示例可供参考。

我希望能够不时地通过在列表中复制一些内存以及相关的变量名称来进行查看,然后在 RT 系统运行时查看它们。

RT 系统通常不易于调试。您可能做的最好的事情是拍摄整个堆栈(已使用部分)的快照,然后“捞出”变量值。

为此,您需要知道堆栈指针和指令指针的当前值、堆栈的内容以及所有 ELF 对象的加载地址。而且您需要重新实现调试器的大部分(或修改现有的)。

最简单的方法可能是将上述信息转换(后处理)为 ELF core,然后使用您选择的现有调试器来分析这些值。您可以使用 Google用户空间 coredumper查看所涉及的内容。另请参阅此答案

于 2017-04-14T15:50:24.743 回答