gpt4 book ai didi

c - 如何使用 arm gdb 忽略中断

转载 作者:太空狗 更新时间:2023-10-29 15:41:38 25 4
gpt4 key购买 nike

我正在尝试使用 arm-none-eabi-gdb 调试程序并单步执行。有一个中断,USB0_Handler,我不想在单步执行程序时单步执行。为此,我尝试使用skip,但它没有用,即使我尝试跳过函数或跳过整个文件(包含中断)。我正在使用openocd在tm4c123gh6pm上实现远程调试。

我已经到了不知是否应该为自己定义一个 gdb 函数的地步,或者我遗漏了一点。这是我的终端的输出:

(gdb) info skip
Num Type Enb What
1 function y USB0_Handler
(gdb) c
Continuing.

Breakpoint 2, relayTask () at ./relay.c:191
191 nextTime = rtcGetTimeIn(DEFAULT_REFRESH_RATE);
(gdb) n
USB0_Handler () at ./UsbConfig.c:326
326 {
(gdb) n
332 ui32Status = MAP_USBIntStatusControl(USB0_BASE);
(gdb) n
337 USBDeviceIntHandlerInternal(0, ui32Status);
(gdb) n
338 }
(gdb) n #returning at the top of USB0_Handler
326 {

最佳答案

当在步进时触发中断时,GDB 通常会停止,因为步进在它没有预料到的地方结束。

从调试器的角度来看,中断处理程序通常很难处理,因为它们是在新的上下文中执行的:堆栈帧已更改,除非 GDB 识别帧中的特定模式,否则它将无法计算出完整的堆栈跟踪(即中断处理程序帧 + 中断前的常规程序堆栈跟踪。)

让您脱离中断处理程序的最简单方法是在函数的最后一行放置一个断点,然后继续并继续单步执行。有人建议使用 finish 命令,但它可能会再次失败,具体取决于堆栈跟踪的质量。

由于 GDB 的脚本能力(例如在 python 中),可以通过检查 PC 来自动执行此操作,如果 PC 位于 irq vector 中的 isr 地址上,则获取返回地址,放置一个临时断点并恢复。

关于c - 如何使用 arm gdb 忽略中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37668722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com