Debugging, Step-over (F6) is sometimes slow as if gdb can't gracefully step over in-lined functions

I’m debugging a program on an STM32F4Discovery board. The program loads and runs ok and breakpoints work ok. Sometimes when I Step Over (F6) a function the step is fast. Other times, a Step Over takes more than a minute. I can reproduce this issue with a blank project generated with CubeMX. CubeMX generates a main.c file with a main() with calls to:
- HAL_Init();
- SystemClock_Config();
- MX_GPIO_Init();
Stepping over the first two function calls is ‘instantaneous’. Stepping over MX_GPIO_Init, on the other hand, takes a little over a minute, and during that time the STM32 Debugging Console windows shows a series of several “Info : halted: PC: 0x0800xxxx” statements that look like this:
Info : halted: PC: 0x08000e0c Info : halted: PC: 0x08000eb0 Info : halted: PC: 0x08000eb2 Info : halted: PC: 0x08000eb4 Info : halted: PC: 0x08000eb8 Info : halted: PC: 0x08000ebc Info : halted: PC: 0x08000ebe Info : halted: PC: 0x08000ec0 Info : halted: PC: 0x08000ec4 Info : halted: PC: 0x08000ec6 Info : halted: PC: 0x08000ec8 Info : halted: PC: 0x08000eca Info : halted: PC: 0x08000ece Info : halted: PC: 0x08000ed0 Info : halted: PC: 0x08000ed2 Info : halted: PC: 0x08000ed6 Info : halted: PC: 0x08000ed8 Info : halted: PC: 0x08000eda Info : halted: PC: 0x08000edc Info : halted: PC: 0x08000ee0 Info : halted: PC: 0x08000ee2 Info : halted: PC: 0x08000ee4 Info : halted: PC: 0x08000ee8 Info : halted: PC: 0x08000eea Info : halted: PC: 0x08000eec Info : halted: PC: 0x08000eee Info : halted: PC: 0x08000ef2 Info : halted: PC: 0x08000ef4 Info : halted: PC: 0x08000ef6 Info : halted: PC: 0x08000efa Info : halted: PC: 0x08000efc Info : halted: PC: 0x08000efe Info : halted: PC: 0x08000f00 Info : halted: PC: 0x08000f04 Info : halted: PC: 0x08000f06 Info : halted: PC: 0x08000f08 Info : halted: PC: 0x08000f0c Info : halted: PC: 0x08000f0e Info : halted: PC: 0x08000f10 Info : halted: PC: 0x08000f12 Info : halted: PC: 0x08000f16 Info : halted: PC: 0x08000f18 Info : halted: PC: 0x08000f1a Info : halted: PC: 0x08000f1e Info : halted: PC: 0x08000f20 Info : halted: PC: 0x08000f22 Info : halted: PC: 0x08000f24 Info : halted: PC: 0x08000f26 Info : halted: PC: 0x08000f28 Info : halted: PC: 0x08000f2a Info : halted: PC: 0x08000f2c Info : halted: PC: 0x08000f2e Info : halted: PC: 0x08000f30 Info : halted: PC: 0x08000f32 Info : halted: PC: 0x0800037c Info : halted: PC: 0x08000f38 Info : halted: PC: 0x08000f3a Info : halted: PC: 0x08000f3c Info : halted: PC: 0x08000f3e Info : halted: PC: 0x08000f40 Info : halted: PC: 0x08000f42 Info : halted: PC: 0x08000f44 Info : halted: PC: 0x0800037c Info : halted: PC: 0x08000f4a Info : halted: PC: 0x08000f4c Info : halted: PC: 0x08000f4e Info : halted: PC: 0x08000f50 Info : halted: PC: 0x08000f52 Info : halted: PC: 0x08000f54 Info : halted: PC: 0x08000f56 Info : halted: PC: 0x08000f58 Info : halted: PC: 0x0800037c Info : halted: PC: 0x08000f5e Info : halted: PC: 0x08000f60 Info : halted: PC: 0x08000f62 Info : halted: PC: 0x08000f66 Info : halted: PC: 0x08000f6a Info : halted: PC: 0x08000f6c Info : halted: PC: 0x0800037c Info : halted: PC: 0x08000f72 Info : halted: PC: 0x08000f74 Info : halted: PC: 0x08000f76 Info : halted: PC: 0x08000f78 Info : halted: PC: 0x08000f7a Info : halted: PC: 0x08000f7c Info : halted: PC: 0x08000f7e Info : halted: PC: 0x08000f82 Info : halted: PC: 0x0800037c Info : halted: PC: 0x08000f88 Info : halted: PC: 0x08000f8a Info : halted: PC: 0x08000f8c Info : halted: PC: 0x08000f8e Info : halted: PC: 0x08000f92 Info : halted: PC: 0x08000f94 Info : halted: PC: 0x08000f96 Info : halted: PC: 0x08000f98 Info : halted: PC: 0x08000f9a Info : halted: PC: 0x0800037c Info : halted: PC: 0x08000fa0 Info : halted: PC: 0x08000fa4 Info : halted: PC: 0x08000fa6 Info : halted: PC: 0x08000fa8 Info : halted: PC: 0x08000faa Info : halted: PC: 0x0800037c Info : halted: PC: 0x08000fb2 Info : halted: PC: 0x08000fb4 Info : halted: PC: 0x08000fb6 Info : halted: PC: 0x08000fb8 Info : halted: PC: 0x08000fba Info : halted: PC: 0x08000fbc Info : halted: PC: 0x08000fbe Info : halted: PC: 0x08000fc0 Info : halted: PC: 0x0800037c Info : halted: PC: 0x08000fc8 Info : halted: PC: 0x08000fca Info : halted: PC: 0x08000fcc Info : halted: PC: 0x08000fce Info : halted: PC: 0x08000fd0 Info : halted: PC: 0x08000fd2 Info : halted: PC: 0x08000fd4 Info : halted: PC: 0x0800037c Info : halted: PC: 0x08000fdc Info : halted: PC: 0x08000fde Info : halted: PC: 0x08000fe0 Info : halted: PC: 0x08000fe2 Info : halted: PC: 0x08000fe4 Info : halted: PC: 0x08000fe6 Info : halted: PC: 0x08000fe8 Info : halted: PC: 0x08000fec Info : halted: PC: 0x0800037c Info : halted: PC: 0x08000ff4 Info : halted: PC: 0x08000ff6 Info : halted: PC: 0x08000ff8 Info : halted: PC: 0x08000ffa Info : halted: PC: 0x08000ffc Info : halted: PC: 0x08000ffe Info : halted: PC: 0x0800037c Info : halted: PC: 0x08001006 Info : halted: PC: 0x08001008 Info : halted: PC: 0x0800100a Info : halted: PC: 0x0800100c Info : halted: PC: 0x0800100e Info : halted: PC: 0x08001010 Info : halted: PC: 0x08001012 Info : halted: PC: 0x08001014 Info : halted: PC: 0x08001016 Info : halted: PC: 0x0800037c Info : halted: PC: 0x0800101c Info : halted: PC: 0x0800101e Info : halted: PC: 0x08001020 Info : halted: PC: 0x08001022 Info : halted: PC: 0x08001024 Info : halted: PC: 0x08001026 Info : halted: PC: 0x0800037c Info : halted: PC: 0x0800102e Info : halted: PC: 0x08001030 Info : halted: PC: 0x08001032 Info : halted: PC: 0x08001034 Info : halted: PC: 0x08001036 Info : halted: PC: 0x08001038 Info : halted: PC: 0x0800103a Info : halted: PC: 0x0800103c Info : halted: PC: 0x08001040 Info : halted: PC: 0x0800037c Info : halted: PC: 0x08001046 Info : halted: PC: 0x08001048 Info : halted: PC: 0x0800104a Info : halted: PC: 0x0800104e Info : halted: PC: 0x08001050 Info : halted: PC: 0x0800037c
Info : halted: PC: 0x08000e0c
Info : halted: PC: 0x08000eb0
Info : halted: PC: 0x08000eb2
Info : halted: PC: 0x08000eb4
Info : halted: PC: 0x08000eb8
Info : halted: PC: 0x08000ebc
Info : halted: PC: 0x08000ebe
Info : halted: PC: 0x08000ec0
Info : halted: PC: 0x08000ec4
Info : halted: PC: 0x08000ec6
Info : halted: PC: 0x08000ec8
Info : halted: PC: 0x08000eca
Info : halted: PC: 0x08000ece
Info : halted: PC: 0x08000ed0
Info : halted: PC: 0x08000ed2
Info : halted: PC: 0x08000ed6
Info : halted: PC: 0x08000ed8
Info : halted: PC: 0x08000eda
Info : halted: PC: 0x08000edc
Info : halted: PC: 0x08000ee0
Info : halted: PC: 0x08000ee2
Info : halted: PC: 0x08000ee4
Info : halted: PC: 0x08000ee8
Info : halted: PC: 0x08000eea
Info : halted: PC: 0x08000eec
Info : halted: PC: 0x08000eee
Info : halted: PC: 0x08000ef2
Info : halted: PC: 0x08000ef4
Info : halted: PC: 0x08000ef6
Info : halted: PC: 0x08000efa
Info : halted: PC: 0x08000efc
Info : halted: PC: 0x08000efe
Info : halted: PC: 0x08000f00
Info : halted: PC: 0x08000f04
Info : halted: PC: 0x08000f06
Info : halted: PC: 0x08000f08
Info : halted: PC: 0x08000f0c
Info : halted: PC: 0x08000f0e
Info : halted: PC: 0x08000f10
Info : halted: PC: 0x08000f12
Info : halted: PC: 0x08000f16
Info : halted: PC: 0x08000f18
Info : halted: PC: 0x08000f1a
Info : halted: PC: 0x08000f1e
Info : halted: PC: 0x08000f20
Info : halted: PC: 0x08000f22
Info : halted: PC: 0x08000f24
Info : halted: PC: 0x08000f26
Info : halted: PC: 0x08000f28
Info : halted: PC: 0x08000f2a
Info : halted: PC: 0x08000f2c
Info : halted: PC: 0x08000f2e
Info : halted: PC: 0x08000f30
Info : halted: PC: 0x08000f32
Info : halted: PC: 0x0800037c
Info : halted: PC: 0x08000f38
Info : halted: PC: 0x08000f3a
Info : halted: PC: 0x08000f3c
Info : halted: PC: 0x08000f3e
Info : halted: PC: 0x08000f40
Info : halted: PC: 0x08000f42
Info : halted: PC: 0x08000f44
Info : halted: PC: 0x0800037c
Info : halted: PC: 0x08000f4a
Info : halted: PC: 0x08000f4c
Info : halted: PC: 0x08000f4e
Info : halted: PC: 0x08000f50
Info : halted: PC: 0x08000f52
Info : halted: PC: 0x08000f54
Info : halted: PC: 0x08000f56
Info : halted: PC: 0x08000f58
Info : halted: PC: 0x0800037c
Info : halted: PC: 0x08000f5e
Info : halted: PC: 0x08000f60
Info : halted: PC: 0x08000f62
Info : halted: PC: 0x08000f66
Info : halted: PC: 0x08000f6a
Info : halted: PC: 0x08000f6c
Info : halted: PC: 0x0800037c
Info : halted: PC: 0x08000f72
Info : halted: PC: 0x08000f74
Info : halted: PC: 0x08000f76
Info : halted: PC: 0x08000f78
Info : halted: PC: 0x08000f7a
Info : halted: PC: 0x08000f7c
Info : halted: PC: 0x08000f7e
Info : halted: PC: 0x08000f82
Info : halted: PC: 0x0800037c
Info : halted: PC: 0x08000f88
Info : halted: PC: 0x08000f8a
Info : halted: PC: 0x08000f8c
Info : halted: PC: 0x08000f8e
Info : halted: PC: 0x08000f92
Info : halted: PC: 0x08000f94
Info : halted: PC: 0x08000f96
Info : halted: PC: 0x08000f98
Info : halted: PC: 0x08000f9a
Info : halted: PC: 0x0800037c
Info : halted: PC: 0x08000fa0
Info : halted: PC: 0x08000fa4
Info : halted: PC: 0x08000fa6
Info : halted: PC: 0x08000fa8
Info : halted: PC: 0x08000faa
Info : halted: PC: 0x0800037c
Info : halted: PC: 0x08000fb2
Info : halted: PC: 0x08000fb4
Info : halted: PC: 0x08000fb6
Info : halted: PC: 0x08000fb8
Info : halted: PC: 0x08000fba
Info : halted: PC: 0x08000fbc
Info : halted: PC: 0x08000fbe
Info : halted: PC: 0x08000fc0
Info : halted: PC: 0x0800037c
Info : halted: PC: 0x08000fc8
Info : halted: PC: 0x08000fca
Info : halted: PC: 0x08000fcc
Info : halted: PC: 0x08000fce
Info : halted: PC: 0x08000fd0
Info : halted: PC: 0x08000fd2
Info : halted: PC: 0x08000fd4
Info : halted: PC: 0x0800037c
Info : halted: PC: 0x08000fdc
Info : halted: PC: 0x08000fde
Info : halted: PC: 0x08000fe0
Info : halted: PC: 0x08000fe2
Info : halted: PC: 0x08000fe4
Info : halted: PC: 0x08000fe6
Info : halted: PC: 0x08000fe8
Info : halted: PC: 0x08000fec
Info : halted: PC: 0x0800037c
Info : halted: PC: 0x08000ff4
Info : halted: PC: 0x08000ff6
Info : halted: PC: 0x08000ff8
Info : halted: PC: 0x08000ffa
Info : halted: PC: 0x08000ffc
Info : halted: PC: 0x08000ffe
Info : halted: PC: 0x0800037c
Info : halted: PC: 0x08001006
Info : halted: PC: 0x08001008
Info : halted: PC: 0x0800100a
Info : halted: PC: 0x0800100c
Info : halted: PC: 0x0800100e
Info : halted: PC: 0x08001010
Info : halted: PC: 0x08001012
Info : halted: PC: 0x08001014
Info : halted: PC: 0x08001016
Info : halted: PC: 0x0800037c
Info : halted: PC: 0x0800101c
Info : halted: PC: 0x0800101e
Info : halted: PC: 0x08001020
Info : halted: PC: 0x08001022
Info : halted: PC: 0x08001024
Info : halted: PC: 0x08001026
Info : halted: PC: 0x0800037c
Info : halted: PC: 0x0800102e
Info : halted: PC: 0x08001030
Info : halted: PC: 0x08001032
Info : halted: PC: 0x08001034
Info : halted: PC: 0x08001036
Info : halted: PC: 0x08001038
Info : halted: PC: 0x0800103a
Info : halted: PC: 0x0800103c
Info : halted: PC: 0x08001040
Info : halted: PC: 0x0800037c
Info : halted: PC: 0x08001046
Info : halted: PC: 0x08001048
Info : halted: PC: 0x0800104a
Info : halted: PC: 0x0800104e
Info : halted: PC: 0x08001050
Info : halted: PC: 0x0800037c
It’s almost as if it’s stepping in Instruction mode or an auto-step mode. One difference with the ‘slow stepping’ function is that it’s defined and called in the same main.c file.
So, maybe the function is optimized, inlined, and gdb doesn’t know how to gracefully step over such a function. Maybe tweaks to optimization would resolve the issue. If, instead of stepping, I set a breakpoint after that function and Run, execution is fast.
My concern is that it would be pretty common to debug, say, a class where calls to functions defined in the same file would be very common and a 1-minute-per-step time hit would adversely impact development.
Any suggestions on what to try or how to isolate the issue?