Clang added a new feature to the ObjC compiler that will translate method
calls to commonly un-overridden methods into a function that checks whether
the method is overridden anywhere and if not directly dispatches to the
That means if you do override any of these methods, "step-in" will not step
into your code, since we hit the wrapper function, which has no debug info,
and immediately step out again.
Add code to recognize these functions as "trampolines" and a thread plan that
will get us from the function to the user code, if overridden.
Note, this is not the same feature as the objc_direct attribute, whereby an ObjC developer can state that a certain method will not be overridden so that the compiler will issue a direct call to the implementation function. That actually shouldn't need debugger support for stepping, since we will step directly into the implementation function, not into some ObjC runtime shim. So we'll either stop or not correctly based on whether the implementation function has debug info or not.