
我已经达到了一个我不知道是否应该定义自己的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忽略中断所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)