hardware – How can I debugging program startup on an STM32F205?

I have an embedded board with an STM32 microcontroller, and an ST-Link v2. This setup generally works: I can program the flash, and connect with ST’s CubeProgrammer tool or with openocd. I can attach gdb to the latter, and step through code. So far, so good. It does not appear there is any problem with my physical or electrical setup.

I have a program which is… not so good. Something early in initialization is hanging up the chip to the point where I can no longer connect to it with any tools. I can rescue it by using the “Under reset” mode of CubeProgrammer, holding the reset switch on the board at boot, then connecting before the bad program can wedge the chip.

After connecting this way, the chip is halted. I can flash a known good program. Or, I can use the MCU core screen of CubeProgrammer to “Step” one instruction at a time through the bad program’s startup. That works, until I hit “Run”, and then I quickly get a dialog “Warning: Connection to device 0x411 is lost”, and the chip is no longer usable until I flash it as above. It appears the code is configuring the necessary pins into the alt mode to enable serial wire debugging, so I don’t think that’s the problem, but it’s hard to verify.

So, it appears something in this program is behaving badly. What I’d like to do is set up gdb via openocd to debug startup. With a good program, I can connect with openocd while the program is running, attach gdb, and everything works normally. But I don’t know how to get openocd to do what CubeProgrammer does with the “Under reset” mode, so I can execute initialization of the chip under gdb control.

How can I do this? Or, is there some other tool I should be trying than openocd+gdb? I’m familiar with gdb, but I can try other tools. The host environment is macOS.