Linux目标的相关调试数据

时间:2014-01-06 11:18:22

标签: linux debugging arm report

对于在现场运行的嵌入式ARM系统,需要在发生用户空间应用程序崩溃时检索相关的调试信息。这些信息将存储在非易失性存储器中,以便以后可以进行检索。所有此类信息必须在运行时存储,并且由于内存消耗问题而无法使用第三方应用程序。

到目前为止,我想到了以下几点:

    发生内核SIG时,
  1. 信号ID 和相应的 PC /内存地址;
  2. 进程ID;
  3. 您认为还有哪些其他信息可以识别导致问题并且之后能够进行快速调试?

    谢谢!

1 个答案:

答案 0 :(得分:0)

通常,为了能够理解问题,您需要每个寄存器(从r0到r15),CPSR和堆栈顶部(以便能够确定崩溃前发生的事情)。还请注意,当程序因任何无效操作而中断(跳转到无效地址,...)时,处理器进入异常模式,而您需要在进程的上下文中转储寄存器和堆栈。 / p>

为了能够使用这些数据进行调查,您还必须保留构建中的ELF文件(如果可能,包含调试信息),以便能够解释寄存器和堆栈的内容。

最后,您保留的信息越多,调试就越容易,但是在发生故障时保留程序使用的每个内存部分可能会很昂贵(事实上,我从来没有完成了这个)。

在尸检分析中,您将面临一些限制:

  • 动态链接库:如果您的崩溃发生在动态加载和链接的代码you will also need the lib binary you are using on your target中。
  • 内存损坏:内存损坏通常会导致随机数据调用为代码。在ARM上使用linux,这可能会导致段错误,因为你无法进入其他进程内存区域,并且因为你的数据可能会被标记为“从不执行”,但是,当崩溃发生时,你可能有已损坏可能允许您识别损坏源的数据。死后分析并不总能确定失败原因。