6 years, 10 months ago.

Why doesn't gdb reach a breakpoint in main?


I'm trying to debug a simple test program on my Nucleo board. I've successfully compiled it using GCC-ARM (arm-none-eabi-gcc), flashed my device over USB, and saw the light blink on and off. The trouble arises, however, when I try to actually step through my program. And yes, I made sure to enable debugging with the "-g" compile flag.

Here's my terminal output. I start the gdb server daemon using OpenOCD...

matt@ubuntu:~/Nucleo_blink_led$ openocd -f board/st_nucleo_f401re.cfg
Open On-Chip Debugger 0.8.0 (2014-05-10-23:20)
Licensed under GNU GPL v2
For bug reports, read
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : This adapter doesn't support configurable speed
Info : STLINK v2 JTAG v19 API v2 SWIM v3 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 3.257255
Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints

...execute gdb in another window...

matt@ubuntu:~/Nucleo_blink_led$ arm-none-eabi-gdb Nucleo_blink_led.elf
GNU gdb (7.8-0ubuntu1+6) 7.8
Copyright (C) 2014 Free Software Foundation, Inc.
Reading symbols from Nucleo_blink_led.elf...done.

...enter a few commands...

(gdb) tar ext :3333
Remote debugging using :3333
gpio_write (obj=0x20000268 <myled>, value=1)
    at ./mbed/TARGET_NUCLEO_F401RE/TARGET_STM/TARGET_NUCLEO_F401RE/gpio_object.h:55
55            *obj->reg_set = obj->mask;
(gdb) b main
Breakpoint 1 at 0x80002a2: file main.cpp, line 7.
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y

Starting program: /home/matt/Downloads/Nucleo_blink_led/Nucleo_blink_led.elf
Note: automatically using hardware breakpoints for read-only addresses.

...and get this output from OpenOCD.

Info : accepting 'gdb' connection from 3333
Info : device id = 0x10006433
Info : flash size = 512kbytes
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x080004a4 msp: 0x20018000

Would somebody please tell me how to make sure that my program actually gets to main before halting, so I can step through it like I had originally meant to? Thanks in advance.

1 Answer

6 years, 10 months ago.

Rather than using the run command after setting the breakpoint, you could instead try:

monitor reset halt

I don't believe that pyOCD really supports the extended-remote target either. You should use target remote :3333 instead.