//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public bool RemoveModule (string moduleName) { LoggingUtils.PrintFunction (); if (string.IsNullOrWhiteSpace (moduleName)) { throw new ArgumentNullException ("moduleName"); } DebuggeeModule module = null; lock (m_debugModules) { if (m_debugModules.TryGetValue (moduleName, out module)) { m_debugModules.Remove (moduleName); } } if (module != null) { m_debugger.Engine.Broadcast (new DebugEngineEvent.ModuleLoad (module as IDebugModule2, false), DebugProgram, null); } return (module != null); }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public CLangDebuggeeModule AddModule (string moduleName, MiAsyncRecord asyncRecord) { LoggingUtils.PrintFunction (); if (string.IsNullOrWhiteSpace (moduleName)) { throw new ArgumentNullException ("moduleName"); } DebuggeeModule module = null; lock (m_debugModules) { if (!m_debugModules.TryGetValue (moduleName, out module)) { module = new CLangDebuggeeModule (m_debugger.Engine, asyncRecord); m_debugModules.Add (moduleName, module); } } if (module != null) { m_debugger.Engine.Broadcast (new DebugEngineEvent.ModuleLoad (module as IDebugModule2, true), DebugProgram, null); if (module.SymbolsLoaded) { m_debugger.Engine.Broadcast (new DebugEngineEvent.BeforeSymbolSearch (module as IDebugModule3), DebugProgram, null); m_debugger.Engine.Broadcast (new DebugEngineEvent.SymbolSearch (module as IDebugModule3, module.Name), DebugProgram, null); } } return (CLangDebuggeeModule) module; }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public CLangDebuggeeModule GetModule (string moduleName) { LoggingUtils.PrintFunction (); if (string.IsNullOrWhiteSpace (moduleName)) { throw new ArgumentNullException ("moduleName"); } DebuggeeModule module = null; lock (m_debugModules) { m_debugModules.TryGetValue (moduleName, out module); } return (CLangDebuggeeModule) module; }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// public override int SetFrameInfo(enum_FRAMEINFO_FLAGS requestedFlags, uint radix, ref FRAMEINFO frameInfo) { LoggingUtils.PrintFunction(); try { frameInfo.m_dwValidFields = 0; if ((requestedFlags & enum_FRAMEINFO_FLAGS.FIF_FUNCNAME) != 0) { StringBuilder functionName = new StringBuilder(); functionName.Append("[" + m_locationAddress.ToString() + "] "); if (((requestedFlags & enum_FRAMEINFO_FLAGS.FIF_FUNCNAME_MODULE) != 0) && (!string.IsNullOrEmpty(m_locationModule))) { functionName.Append(m_locationModule + "!"); } functionName.Append(m_locationFunction); /*if ((requestedFlags & enum_FRAMEINFO_FLAGS.FIF_FUNCNAME_ARGS) != 0) * { * functionName.Append ("(...)"); * } * * if ((requestedFlags & enum_FRAMEINFO_FLAGS.FIF_FUNCNAME_LINES) != 0) * { * functionName.AppendFormat (" Line {0}", "?"); * }*/ frameInfo.m_bstrFuncName = functionName.ToString(); frameInfo.m_dwValidFields |= enum_FRAMEINFO_FLAGS.FIF_FUNCNAME; } if ((requestedFlags & enum_FRAMEINFO_FLAGS.FIF_RETURNTYPE) != 0) { frameInfo.m_bstrReturnType = "<return type>"; frameInfo.m_dwValidFields |= enum_FRAMEINFO_FLAGS.FIF_RETURNTYPE; } if ((requestedFlags & enum_FRAMEINFO_FLAGS.FIF_ARGS) != 0) { frameInfo.m_bstrArgs = m_stackArguments.Keys.ToString(); frameInfo.m_dwValidFields |= enum_FRAMEINFO_FLAGS.FIF_ARGS; } if ((requestedFlags & enum_FRAMEINFO_FLAGS.FIF_LANGUAGE) != 0) { string languageName = string.Empty; Guid languageGuid = Guid.Empty; GetLanguageInfo(ref languageName, ref languageGuid); frameInfo.m_bstrLanguage = languageName; frameInfo.m_dwValidFields |= enum_FRAMEINFO_FLAGS.FIF_LANGUAGE; } if ((requestedFlags & enum_FRAMEINFO_FLAGS.FIF_MODULE) != 0) { frameInfo.m_bstrModule = m_locationModule; frameInfo.m_dwValidFields |= enum_FRAMEINFO_FLAGS.FIF_MODULE; } if ((requestedFlags & enum_FRAMEINFO_FLAGS.FIF_STACKRANGE) != 0) { frameInfo.m_addrMin = 0ul; frameInfo.m_addrMax = 0ul; frameInfo.m_dwValidFields |= enum_FRAMEINFO_FLAGS.FIF_STACKRANGE; } if ((requestedFlags & enum_FRAMEINFO_FLAGS.FIF_FRAME) != 0) { frameInfo.m_pFrame = this; frameInfo.m_dwValidFields |= enum_FRAMEINFO_FLAGS.FIF_FRAME; } if ((requestedFlags & enum_FRAMEINFO_FLAGS.FIF_DEBUGINFO) != 0) { frameInfo.m_fHasDebugInfo = (m_locationIsSymbolicated) ? 1 : 0; frameInfo.m_dwValidFields |= enum_FRAMEINFO_FLAGS.FIF_DEBUGINFO; } if ((requestedFlags & enum_FRAMEINFO_FLAGS.FIF_STALECODE) != 0) { frameInfo.m_fStaleCode = 0; frameInfo.m_dwValidFields |= enum_FRAMEINFO_FLAGS.FIF_STALECODE; } if ((requestedFlags & enum_FRAMEINFO_FLAGS.FIF_DEBUG_MODULEP) != 0) { if (!string.IsNullOrEmpty(m_locationModule)) { IDebugProgram2 debugProgram; IEnumDebugModules2 debugProgramModules; uint debugModulesCount = 0; LoggingUtils.RequireOk(m_thread.GetProgram(out debugProgram)); LoggingUtils.RequireOk(debugProgram.EnumModules(out debugProgramModules)); LoggingUtils.RequireOk(debugProgramModules.GetCount(out debugModulesCount)); DebuggeeModule [] debugModules = new DebuggeeModule [debugModulesCount]; LoggingUtils.RequireOk(debugProgramModules.Next(debugModulesCount, debugModules, ref debugModulesCount)); for (int i = 0; i < debugModulesCount; ++i) { if (m_locationModule.Equals(debugModules [i].Name)) { frameInfo.m_pModule = debugModules [i]; frameInfo.m_dwValidFields |= enum_FRAMEINFO_FLAGS.FIF_DEBUG_MODULEP; break; } } } } return(Constants.S_OK); } catch (Exception e) { LoggingUtils.HandleException(e); return(Constants.E_FAIL); } }