【问题标题】:How to debug memory issues in embedded application如何调试嵌入式应用程序中的内存问题
【发布时间】:2012-12-18 07:31:48
【问题描述】:

我是嵌入式编程的新手,但我必须调试在嵌入式平台上运行的相当复杂的应用程序。我通过 JTAG 接口使用 GDB。

我的程序在某些时候以一种意想不到的方式崩溃了。我想这是由于一些与内存相关的问题而发生的。 GDB 是否允许我在系统崩溃后检查内存,从而完全没有响应?

【问题讨论】:

  • 您使用的是哪种处理器?
  • 它是一个名为 icyflex1 (csem.ch/docs/Show.aspx/9224/docname/CSEM-STR08-Page%2023.pdf) 的 32 位处理器,我使用的是基于 GNU 的工具链。
  • 不幸的是,该文档没有提及任何有关调试的 CPU 功能。正如 Carl Norum 所提到的,您通常会捕获异常然后检查 CPU 的状态。当您遇到异常时,将有一种特定于 CPU 的方法来确定 PC 是什么。一些处理器具有调试/故障状态寄存器,可以告诉您访问了哪些错误地址以及它是代码还是数据总线。

标签: c debugging memory gdb embedded


【解决方案1】:

这取决于您的设置。特别是,由于您使用的是 JTAG,您可以将调试器设置为在检测到异常时停止处理器(例如非法访问受保护的内存等)。如果没有,您可以用无限循环替换您的异常处理程序。然后您可以手动展开异常以查看导致崩溃的处理器正在执行的操作。通常,在这种情况下,您仍然可以访问内存,您可以使用 GDB 直接环顾四周,或者将所有内容转储到文件中以便稍后查看。

【讨论】:

    【解决方案2】:

    这取决于发生了什么崩溃。如果系统只是无响应(在某些无限循环、死锁或类似情况下),那么它通常会响应 GDB,您将能够看到回溯(调用堆栈)等。 如果系统/总线/cpu 实际上已经崩溃(在较低级别),那么它可能不会响应。在这种情况下,您可以尝试在可疑位置/变量处设置断点并观察发生了什么。模拟器(ISS,RTL - 如果适用)也可以派上用场,将行为与硬件进行比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-03
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2016-06-11
      • 1970-01-01
      • 2019-07-27
      相关资源
      最近更新 更多