【发布时间】:2016-06-07 00:22:45
【问题描述】:
我正在尝试使用 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 {
【问题讨论】:
-
您不会单步进入处理程序,但它恰好发生在您单步执行代码时。
-
您可以尝试 finish 命令退出中断处理程序。
-
我不确定 gdb 有没有很好的方法来做到这一点。如果
UsbConfig.c中没有您需要调试的内容,也许一种解决方法是确保在没有调试信息的情况下对其进行编译(即,编译器命令行上没有-g)。 -
finish 命令实际上不起作用。我最近修改了我的 Makefile 为
UsbConfig.c添加了一个特定规则(没有 -g 或 -ggdb),但在调试时我仍然陷入USB0_Handler(使用新版本)
标签: c gdb arm bare-metal