//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public int EnumModules (out IEnumDebugModules2 ppEnum) { // // Enumerates the modules that this program has loaded and is executing. // LoggingUtils.PrintFunction (); try { List<IDebugModule2> modules = new List<IDebugModule2> (); foreach (DebuggeeModule module in m_debugModules.Values) { modules.Add (module as IDebugModule2); } ppEnum = new DebuggeeModule.Enumerator (modules); if (ppEnum == null) { throw new InvalidOperationException (); } return Constants.S_OK; } catch (Exception e) { LoggingUtils.HandleException (e); ppEnum = null; return Constants.E_FAIL; } }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public int EnumCodePaths (string pszHint, IDebugCodeContext2 pStart, IDebugStackFrame2 pFrame, int fSource, out IEnumCodePaths2 ppEnum, out IDebugCodeContext2 ppSafety) { // // Enumerates the code paths of this program. // LoggingUtils.PrintFunction (); #if false try { // // Get the entire call-stack for the current thread, and enumerate. // CLangDebuggeeStackFrame stackFrame = pFrame as CLangDebuggeeStackFrame; IDebugThread2 thread; LoggingUtils.RequireOk (stackFrame.GetThread (out thread)); CLangDebuggeeThread stackFrameThread = thread as CLangDebuggeeThread; List<DebuggeeStackFrame> threadCallStack = stackFrameThread.StackTrace (uint.MaxValue); List<CODE_PATH> threadCodePaths = new List<CODE_PATH> (); for (int i = 0; i < threadCallStack.Count; ++i) { string frameName; IDebugCodeContext2 codeContext; DebuggeeStackFrame frame = threadCallStack [i] as DebuggeeStackFrame; LoggingUtils.RequireOk (frame.GetName (out frameName)); LoggingUtils.RequireOk (frame.GetCodeContext (out codeContext)); if (codeContext != null) { CODE_PATH codePath = new CODE_PATH (); codePath.bstrName = frameName; codePath.pCode = codeContext; threadCodePaths.Add (codePath); } } ppEnum = new DebuggeeProgram.EnumeratorCodePaths (threadCodePaths); ppSafety = null; return Constants.S_OK; } catch (Exception e) { LoggingUtils.HandleException (e); #endif { ppEnum = null; ppSafety = null; return Constants.E_FAIL; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public int EnumModules (out IEnumDebugModules2 ppEnum) { // // Enumerates the modules that this program has loaded and is executing. // LoggingUtils.PrintFunction (); try { List<IDebugModule2> modules = new List<IDebugModule2> (); foreach (DebuggeeModule module in m_debugModules) { modules.Add (module as IDebugModule2); } ppEnum = new DebuggeeModule.Enumerator (modules); if (ppEnum == null) { throw new InvalidOperationException (); } return Constants.S_OK; } catch (Exception e) { LoggingUtils.HandleException (e); ppEnum = null; return Constants.E_FAIL; } }