private bool TryCallback(ThreadServant thread, TargetMemoryAccess memory, ref StackFrame frame, bool exact_match) { try { if (frame == null) return false; Inferior.CallbackFrame callback = thread.GetCallbackFrame ( frame.StackPointer, exact_match); if (callback == null) return false; frame = thread.Architecture.CreateFrame ( thread.Client, FrameType.Normal, memory, callback.Registers); FrameType callback_type; string frame_name = "<method called from mdb>"; if (callback.IsRuntimeInvokeFrame) { callback_type = FrameType.RuntimeInvoke; TargetFunctionType func = thread.GetRuntimeInvokedFunction (callback.ID); if (func != null) frame_name = String.Format ("<Invocation of: {0}>", func.FullName); } else { callback_type = FrameType.Callback; } AddFrame (new StackFrame ( thread.Client, callback_type, callback.CallAddress, callback.StackPointer, TargetAddress.Null, callback.Registers, thread.NativeLanguage, new Symbol (frame_name, callback.CallAddress, 0))); return true; } catch (TargetException) { return false; } }