堆栈上

时间:2017-04-13 13:49:33

标签: c debugging gcc elf symbol-tables

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

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

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

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

1 个答案:

答案 0 :(得分:1)

  

但是如何访问这些信息?

TL; DR:它很复杂。

您需要构建几乎完整的调试器。您可以观看this space。当作者进入第9步时,您将有一个例子可以跟随。

  

我希望能够偶尔通过复制列表中的一些内存以及相关的变量名来查看,然后在RT系统继续时查看它们。

RT系统通常不易于调试。你可能做的最好的事情是拍摄堆栈的整个(使用过的部分)的快照,并且"捞出"变量值以后。

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

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