I've got an iOS project that links to an external static library written in C++. The static library makes calls to functions implemented by libstdc++, which is dynamically linked. For instance, I call the initialization function for this library (let's call it foo_init()
) and it immediately calls setlocale()
.
The static library is compiled with -g, meaning debug symbols are around for me to step into code inside the debugger. I successfully step into foo_init()
. When I attempt to Step Over the call to setlocale()
, XCode doesn't quite do that. It ends up in a function called dyld_stub_setlocale
. This function is a single jmp
instruction to perform the dynamic load & function call.
I've tried Stepping Over/In/Out of dyld_stub_setlocale
but they don't get me where I want, which is back into foo_init()
. Step Over and Step In end up in stub_helpers
, and Step Out acts like continue. If I try Step Over/In inside stub_helpers
, XCode single steps and the stack window displaying foo_init()
changes to ??
. At this point, the decision tree for stepping in/out kind of explodes so I won't go into further details, but no combinations I've tried end up back to the line after the call to setlocale
.
I am able to set a breakpoint for the line, hit continue, and have it work, but this is not a scalable solution for debugging a static library with which I am not very familiar.
Note that I tried to find a way to link libstdc++-static instead so I could avoid the dynamic loader issues, but Apple has removed the library from newer SDKs and I don't have the older ones.
Is there a linker or compiler option to make the code easier for the debugger to decipher?