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

c – 如何使用arm gdb忽略中断,第1张

概述我正在尝试使用arm-none-eabi-gdb调试程序并逐步执行它.有一个中断,USB0_Handler,我不想在步进程序时插入.为了实现这一点,我尝试使用skip,但是它没有用,即使我尝试跳过该函数或跳过整个文件(包含中断).我正在使用openocd来实现tm4c123gh6pm的远程调试. 我已经达到了一个我不知道是否应该定义自己的gdb函数或者我错过了一点的点.这是我终端的输出: (gdb 我正在尝试使用arm-none-eabi-gdb调试程序并逐步执行它.有一个中断,USB0_Handler,我不想在步进程序时插入.为了实现这一点,我尝试使用skip,但是它没有用,即使我尝试跳过该函数或跳过整个文件(包含中断).我正在使用openocd来实现tm4c123gh6pm的远程调试.

我已经达到了一个我不知道是否应该定义自己的gdb函数或者我错过了一点的点.这是我终端的输出:

(gdb) info skipNum     Type           Enb What1       function       y   USB0_Handler(gdb) cContinuing.Breakpoint 2,relayTask () at ./relay.c:191191         nextTime = rtcGetTimeIn(DEFAulT_REFRESH_RATE);(gdb) nUSB0_Handler () at ./UsbConfig.c:326326 {(gdb) n332     ui32Status = MAP_USBIntStatusControl(USB0_BASE);(gdb) n337     USBDeviceIntHandlerInternal(0,ui32Status);(gdb) n338 }(gdb) n  #returning at the top of USB0_Handler326 {
解决方法 当步进时触发中断时,GDB通常会停止,因为步骤在它没有预料到的位置结束.

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

让你退出中断处理程序的最简单方法是在函数的最后一行设置一个断点,恢复并继续步进.有人建议使用finish命令但它可能会失败,这取决于堆栈跟踪的质量.

由于GDB脚本性(例如在python中),可以通过检查PC并且如果PC在irq向量中的isr地址上自动化,获取返回地址,设置临时断点并恢复.

总结

以上是内存溢出为你收集整理的c – 如何使用arm gdb忽略中断全部内容,希望文章能够帮你解决c – 如何使用arm gdb忽略中断所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1224834.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存