加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 06:52:02 所属栏目:百科 来源:网络整理
导读:我正在尝试使用arm-none-eabi-gdb调试程序并逐步执行它.有一个中断,USB0_Handler,我不想在步进程序时插入.为了实现这一点,我尝试使用skip,但是它没有用,即使我尝试跳过该函数或跳过整个文件(包含中断).我正在使用openocd来实现tm4c123gh6pm的远程调试. 我已
我正在尝试使用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向量中的isr地址上自动化,获取返回地址,设置临时断点并恢复.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读