2017-04-13 40 views
0

当然,C/C++程序中定义的每个变量的符号和类型信息都是可用的,否则调试器将无法显示它们。但是如何获取这些信息?堆栈中局部变量的GCC符号表

关于精灵很多信息是可用的,但毕竟是如何关联的,似乎堆栈即

在远程实时系统(未UNIX下)上举行全球唯一变量,而不是本地的,我我希望能够通过复制列表中的一些内存以及相关的变量名称,然后在RT系统继续时查看它们。

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

+0

这将帮助我很多只是有一个示例程序,打印出一个函数和堆栈中定义的本地结构类型值,扩展字段等。 –

回答

1

但是如何获取这些信息呢?

TL; DR:它很复杂。

您需要构建几乎完整的调试器。你可以看this space。当作者转到第9步时,您将有一个示例要遵循。

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

RT系统通常不易于调试。你可能做的最好的做法是拍摄堆栈的整个(使用部分)快照,并在稍后“捞出”变量值。要做到这一点,您需要知道堆栈指针和指令指针的当前值,堆栈的内容以及所有ELF对象的加载地址。而且你需要重新实现大部分调试器(或者修改现有的调试器)。

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