//
        // IEnumerator interface
        //

        #region IEnumerator Members

        public bool MoveNext()
        {
            var  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);
        }
Example #2
0
        /// <summary>
        /// Apply an edit.  (Edit and Continue feature)
        /// </summary>
        /// <param name="deltaMetadataFile">File containing the Metadata delta.</param>
        /// <param name="deltaILFile">File containing the IL delta.</param>
        /// <param name="deltaPdbFile">File containing the PDB delta.</param>
        /// <param name="editSourceFile">The edited source file. WARNING - this param may be removed in next release.</param>
        public void ApplyEdit(string deltaMetadataFile,
                              string deltaILFile,
                              string deltaPdbFile,
                              string editSourceFile
                              )
        {
            if (SymReader == null && deltaPdbFile != null)
            {
                throw new MDbgException("Cannot update symbols on module without loaded symbols.");
            }

            // read arguments from files
            byte[] deltaMeta;
            using (FileStream dmetaFile = File.OpenRead(deltaMetadataFile))
            {
                deltaMeta = new byte[dmetaFile.Length];
                dmetaFile.Read(deltaMeta, 0, deltaMeta.Length);
            }

            byte[] deltaIL;
            using (FileStream dilFile = File.OpenRead(deltaILFile))
            {
                deltaIL = new byte[dilFile.Length];
                dilFile.Read(deltaIL, 0, deltaIL.Length);
            }

            CorModule.ApplyChanges(deltaMeta, deltaIL);

            if (deltaPdbFile != null)
            {
                // apply dpdb to the symbol store.
                ISymbolReader sr = SymReader;
                (sr as ISymbolReader2).UpdateSymbolStore(deltaPdbFile, null);
            }

            // save file name into of the edit
            if (m_editsSources == null)
            {
                Debug.Assert(EditsCounter == 0); // we don't have any edits
                m_editsSources = new ArrayList();
            }

            m_editsSources.Add(editSourceFile);
            m_editsCounter++;
        }
 public void Reset()
 {
     m_enum.Reset();
     m_mod = null;
 }
Example #4
0
 internal CorActiveFunction(int ilOffset, CorFunction managedFunction, CorModule managedModule)
 {
     m_ilOffset = ilOffset;
     m_function = managedFunction;
     m_module   = managedModule;
 }