public CorMetadataImport(CorModule managedModule)
 {
     // GUID Copied from Cor.h
     Guid IID_IMetadataImport = new Guid("7DAC8207-D3AE-4c75-9B67-92801A497D44");
     m_importer = (IMetadataImport) managedModule.GetMetaDataInterface(IID_IMetadataImport);
     Debug.Assert(m_importer != null);
 }
示例#2
0
 private void setBreakpointThroughDocument(CorModule module, ISymbolReader reader)
 {
     foreach (var doc in reader.GetDocuments())
     {
         if (attemptSetBreakpoint(reader, doc, module))
             return;
     }
 }
示例#3
0
 internal MDbgModule(MDbgProcess process, CorModule managedModule, int number)
 {
     Debug.Assert(process != null && managedModule != null);
     m_process = process;
     m_module = managedModule;
     m_functions = new MDbgFunctionMgr(this);
     m_number = number;
 }
示例#4
0
 private ISymbolReader loadSymbolReader(CorModule module)
 {
     var loader = new SymbolLoader();
     var reader = loader.GetSymbolReader(module);
     if (reader != null)
         _symbolReaders.Add(new KeyValuePair<string, ISymbolReader>(module.Name, reader));
     return reader;
 }
示例#5
0
 public ModuleRVAReader(CorModule moduleToRead)
 {
     if (moduleToRead == null)
     {
         throw new ArgumentNullException("moduleToRead");
     }
     m_module = moduleToRead;
 }
示例#6
0
 public void Set(CorModule module, ISymbolReader reader)
 {
     if (_breakpoint.File == null)
     {
         setBreakpointThroughModule(module, reader);
         return;
     }
     setBreakpointThroughDocument(module, reader);
 }
 //
 // IEnumerator interface
 //
 public bool MoveNext ()
 {
     ICorDebugModule[] a = new ICorDebugModule[1];
     uint c = 0;
     int r = m_enum.Next ((uint) a.Length, a, out c);
     if (r==0 && c==1) // S_OK && we got 1 new element
         m_mod = new CorModule (a[0]);
     else
         m_mod = null;
     return m_mod != null;
 }
示例#8
0
 public ISymbolReader GetSymbolReader(CorModule module)
 {
     ISymbolReader reader = null;
     try
     {
         if (!module.IsDynamic && !module.IsInMemory)
             reader = getSymbolReader(module);
     }
     catch
     {
     }
     return reader;
 }
示例#9
0
        private bool attemptSetBreakpoint(ISymbolReader reader, ISymbolDocument doc, CorModule module)
        {
            if (!doc.URL.Equals(_breakpoint.File))
                return false;

            var line = doc.FindClosestLine(_breakpoint.Line);
            var method = reader.GetMethodFromDocumentPosition(doc, line, _breakpoint.Column);
            var function = module.GetFunctionFromToken(method.Token.GetToken());

            var wasSet = attemptToSetBreakpointThroughSequencePoints(doc, line, method, function);
            if (!wasSet)
                setBreakpointThroughFunction(function);
            return true;
        }
示例#10
0
		public PropertyReference (EvaluationContext ctx, PropertyInfo prop, CorValRef thisobj, CorType declaringType, CorValRef[] index)
			: base (ctx)
		{
			this.prop = prop;
			this.declaringType = declaringType;
			this.module = declaringType.Class.Module;
			this.index = index;
			if (!prop.GetGetMethod (true).IsStatic)
				this.thisobj = thisobj;

			loader = delegate {
				return ((CorValRef)Value).Val;
			};
		}
示例#11
0
        //
        // IEnumerator interface
        //
        public bool MoveNext()
        {
            ICorDebugModule[] a = new ICorDebugModule[1];
            uint c = 0;
            int  r = m_enum.Next((uint)a.Length, a, out c);

            if (r == 0 && c == 1) // S_OK && we got 1 new element
            {
                m_mod = new CorModule(a[0]);
            }
            else
            {
                m_mod = null;
            }
            return(m_mod != null);
        }
示例#12
0
		public PropertyReference (EvaluationContext ctx, PropertyInfo prop, CorValRef thisobj, CorType declaringType, CorValRef[] index)
			: base (ctx)
		{
			this.prop = prop;
			this.declaringType = declaringType;
			if (declaringType.Type == CorElementType.ELEMENT_TYPE_ARRAY ||
			    declaringType.Type == CorElementType.ELEMENT_TYPE_SZARRAY) {
				this.module = ((CorType)((CorEvaluationContext)ctx).Adapter.GetType (ctx, "System.Object")).Class.Module;
			} else {
				this.module = declaringType.Class.Module;
			}
			this.index = index;
			if (!prop.GetGetMethod (true).IsStatic)
				this.thisobj = thisobj;

			flags = GetFlags (prop);

			loader = delegate {
				return ((CorValRef)Value).Val;
			};
		}
示例#13
0
 private ISymbolReader getSymbolReader(CorModule module)
 {
     ISymbolReader reader = null;
     string sympath = Path.GetDirectoryName(module.Name);
     string moduleName = module.Name;
     try
     {
         SymbolBinder binder = new SymbolBinder();
         var importer = new CorMetadataImport(module);
         reader = binder.GetReaderForFile(importer.RawCOMObject, moduleName, sympath);
     }
     catch (COMException ex)
     {
         if (ex.ErrorCode == unchecked((int)0x806D0014))  // E_PDB_CORRUPT
         {
             // Ignore it.
             // This may happen for mismatched pdbs
         }
         else
             throw;
     }
     return reader;
 }
示例#14
0
 public CorMetadataImport(CorModule managedModule)
 {
     // With a dump, m_importer may be null; metadata is not assured.
     m_importer = managedModule.GetMetaDataInterface<IMetadataImport>();
 }
示例#15
0
        /// <summary>
        /// Releases all resources used by the MDbgModule.
        /// </summary>
        public void Dispose()
        {
            // Our funtion list may hold onto unmanaged SymbolMethod objects, so dispose that too.
            m_functions.Dispose();
            m_functions = null;

            // Release unmanaged resources
            if (m_symReader != null)
            {
                // Disposing the symbol reader will release the file lock on the PDB (even when other
                // reader COM objects have yet to be released by the garbage collector).
                ((IDisposable)m_symReader).Dispose();
                m_symReader = null;
            }
            m_module = null;
            m_importer = null;
        }
 public void Reset ()
 {
     m_enum.Reset ();
     m_mod = null;
 }
示例#17
0
 private void setBreakpoint(CorModule module, ISymbolReader reader)
 {
     var setter = new BreakpointSetter(_breakpoint);
     setter.Set(module, reader);
 }
示例#18
0
        /// <summary>
        /// Releases all resources used by the MDbgModule.
        /// </summary>
        public void Dispose()
        {
            // Our funtion list may hold onto unmanaged SymbolMethod objects, so dispose that too.
            m_functions.Dispose();
            m_functions = null;

            // Release unmanaged resources.
            m_symReader = null;
            m_module = null;
            m_importer = null;
        }
示例#19
0
 public CorUpdateModuleSymbolsEventArgs(CorAppDomain appDomain,
                                         CorModule managedModule,
                                         IStream stream)
     : base(appDomain, managedModule)
 {
     m_stream = stream;
 }
示例#20
0
 private void stepIn(CorModule mod, CorStepper stepper)
 {
     var range = tryGetStepRanges(_activeThread, _symbolReaders.Find(r => r.Key.Equals(mod.Name)).Value);
     stepper.StepRange(true, range);
 }
示例#21
0
文件: Module.cs 项目: Orvid/Cosmos
 internal void Unregister(CorModule managedModule)
 {
     Debug.Assert(m_items.ContainsKey(managedModule));
     m_items.Remove(managedModule);
 }
示例#22
0
文件: Thread.cs 项目: Orvid/Cosmos
 internal CorActiveFunction(int ilOffset, CorFunction managedFunction, CorModule managedModule)
 {
     m_ilOffset = ilOffset;
     m_function = managedFunction;
     m_module = managedModule;
 }
示例#23
0
 private void Index(ISymbolReader reader, CorModule module)
 {
     if (readersByModule.ContainsKey(module)) readersByModule[module] = reader;
     else readersByModule.Add(module, reader);
 }
示例#24
0
 public void Reset()
 {
     m_enum.Reset();
     m_mod = null;
 }
示例#25
0
文件: Module.cs 项目: Orvid/Cosmos
        internal MDbgModule Register(CorModule managedModule)
        {
            MDbgModule mdbgModule;
            if (m_items.ContainsKey(managedModule))
            {
                mdbgModule = (MDbgModule)m_items[managedModule];
                return mdbgModule;
            }

            mdbgModule = new MDbgModule(m_process, managedModule, m_freeModuleNumber++);
            m_items.Add(managedModule, mdbgModule);
            return mdbgModule;
        }
示例#26
0
 public CorModuleEventArgs(CorAppDomain appDomain, CorModule managedModule)
     : base(appDomain)
 {
     m_managedModule = managedModule;
 }
示例#27
0
文件: Module.cs 项目: Orvid/Cosmos
 /// <summary>
 /// Looks up a CorModule.
 /// </summary>
 /// <param name="managedModule">Which CorModule to lookup.</param>
 /// <returns>The coresponding MDbgModule.</returns>
 public MDbgModule Lookup(CorModule managedModule)
 {
     return (MDbgModule)m_items[managedModule];
 }
示例#28
0
 private bool hasSymbolReader(CorModule mod)
 {
     return _symbolReaders.Exists(r => r.Key.Equals(mod.Name));
 }
示例#29
0
 internal CorActiveFunction(int ilOffset, CorFunction managedFunction, CorModule managedModule)
 {
     m_ilOffset = ilOffset;
     m_function = managedFunction;
     m_module   = managedModule;
 }
示例#30
0
 private void setBreakpointThroughModule(CorModule module, ISymbolReader reader)
 {
     var token = reader.UserEntryPoint;
     if (hasNoApplicationEntryPoint(token))
         return;
     var method = reader.GetMethod(token);
     var function = module.GetFunctionFromToken(method.Token.GetToken());
     var br = function.CreateBreakpoint();
     br.Activate(true);
 }
示例#31
0
 public CorModuleEventArgs(CorAppDomain appDomain, CorModule managedModule,
     ManagedCallbackType callbackType)
     : base(appDomain, callbackType)
 {
     m_managedModule = managedModule;
 }
示例#32
0
 public ModuleRVAReader(CorModule moduleToRead)
 {
     if(moduleToRead == null)
         throw new ArgumentNullException("moduleToRead");
     m_module = moduleToRead;
 }
示例#33
0
 public CorUpdateModuleSymbolsEventArgs(CorAppDomain appDomain,
                                         CorModule managedModule,
                                         IStream stream,
                                         ManagedCallbackType callbackType)
     : base(appDomain, managedModule, callbackType)
 {
     m_stream = stream;
 }
示例#34
0
 public CorMetadataImport(CorModule managedModule)
 {
     m_importer = managedModule.GetMetaDataInterface <IMetadataImport>();
     Debug.Assert(m_importer != null);
 }