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

    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 EnumModules(out IEnumDebugModules2 ppEnum)
        {
            //
            // Enumerates the modules that this program has loaded and is executing.
            //

            LoggingUtils.PrintFunction();

            ppEnum = null;

            try
            {
                List <IDebugModule2> modules = new List <IDebugModule2> ();

                uint count;

                {
                    LoggingUtils.RequireOk(AttachedEngine.NativeDebugger.NativeProgram.EnumModules(out ppEnum));

                    LoggingUtils.RequireOk(ppEnum.GetCount(out count));

                    IDebugModule2 [] moduleArray = new IDebugModule2 [count];

                    LoggingUtils.RequireOk(ppEnum.Next(count, moduleArray, ref count));

                    modules.AddRange(moduleArray);
                }

                {
                    LoggingUtils.RequireOk(AttachedEngine.JavaDebugger.JavaProgram.EnumModules(out ppEnum));

                    LoggingUtils.RequireOk(ppEnum.GetCount(out count));

                    IDebugModule2 [] moduleArray = new IDebugModule2 [count];

                    LoggingUtils.RequireOk(ppEnum.Next(count, moduleArray, ref count));

                    modules.AddRange(moduleArray);
                }

                ppEnum = new DebuggeeModule.Enumerator(modules);

                return(Constants.S_OK);
            }
            catch (Exception e)
            {
                LoggingUtils.HandleException(e);

                return(Constants.E_FAIL);
            }
        }