////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    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;
    }
Exemple #4
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        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);
            }
        }