【发布时间】:2019-12-10 09:00:06
【问题描述】:
经典设置:有一个引导加载程序和应用程序,分别编译。如果一切正常,引导加载程序会跳转到应用程序。
我附加了一个探针,运行 gdbserver,使用引导加载程序二进制文件启动 gdb。如果我运行file application.elf,那么我会丢失引导加载程序的符号。
我如何通过一次运行一条指令来观察切换,以及应用程序在跳转后立即执行的操作?
通过逐步跟踪 PC 并使用 addr2line 解码每个步骤,可以使用 SWD 指挥官,但我希望有更合适的方法。
【问题讨论】:
-
通常,实际的切换足够简洁,可以使用一侧的符号和旁边的窗口中的另一侧的一般意义/objdump 列表进行调试。另请注意,在许多此类设备上,在启动加载程序后进入应用程序的推荐方法是设置一个标志,重置处理器,在启动时很早就注意到标志并跳转到进行任何芯片配置之前的主应用程序。
-
除非问题出在bootloader,一般在主固件的入口点设置断点就可以了,如果问题出在bootloader,可以用其符号调试,手动查看主固件的入口点从其向量表中读取并分支到。往往真正需要复杂调试的是试图避免 CPU 复位的外围状态遗留问题,这就是为什么芯片制造商通常建议进行复位。
-
谢谢@ChrisStratton,非常有见地的方法,我会在开发产品时考虑到这一点。
标签: gdb embedded remote-debugging bootloader cortex-m