That's a good point. However, it's arguably only hard to use to do modern software development which is a complex use case for a low level language. At least in all my time doing C (>10yrs) I can reduce most of my gdb usage to analyzing core dumps by doing a few simple things: print backtraces per thread, moving up/down the stack and printing variable values. The rare situations I've used it for 'stepping' through code, is also just a few commands. The code itself is where the complexity is at that point that gdb itself is the least of my concerns.