コード例 #1
0
        public CIMessageDictionary GetMessages()
        {
            CIElementList <CIMessage> list = base.ChildrenByType <CIMessage>(TChildSearchType.EEntireHierarchy);
            CIMessageDictionary       ret  = new CIMessageDictionary(list);

            return(ret);
        }
コード例 #2
0
        private void XmlSerializeRegisters(CrashXmlPlugin.FileFormat.Document.CXmlDocumentSerializationParameters aParameters)
        {
            // Must obtain the registers in advance to avoid creating an empty list.
            List <CIRegisterList> regs = new List <CIRegisterList>();

            // Find register lists
            CIElementList <CIRegisterListCollection> allRegs = iThread.ChildrenByType <CIRegisterListCollection>();

            foreach (CIRegisterListCollection registerListCol in allRegs)
            {
                foreach (CIRegisterList registerList in registerListCol)
                {
                    if (registerList.Count > 0)
                    {
                        regs.Add(registerList);
                    }
                }
            }

            // Only write something if we have some entries
            if (regs.Count > 0)
            {
                CXmlNode.WriteLinkListStart(aParameters.Writer, SegConstants.Registers);
                foreach (CIRegisterList registerList in regs)
                {
                    CXmlNode.WriteLink(registerList.Id, SegConstants.Registers, aParameters.Writer);
                }
                CXmlNode.WriteLinkListEnd(aParameters.Writer);
            }
        }
コード例 #3
0
        protected override void XmlSerializeChildren(CrashXmlPlugin.FileFormat.Document.CXmlDocumentSerializationParameters aParameters)
        {
            CIElementList <CIRegisterVisualization> visList = iRegister.ChildrenByType <CIRegisterVisualization>();

            foreach (CIRegisterVisualization vis in visList)
            {
                CXmlNode.WriteLink(vis.Id, SegConstants.ValueInterpretation, aParameters.Writer);
            }
        }
コード例 #4
0
        public static void XmlSerializeMessages(CXmlDocumentSerializationParameters aParameters, CIElement aElement)
        {
            CIElementList <CIMessage> messages = aElement.ChildrenByType <CIMessage>();

            foreach (CIMessage msg in messages)
            {
                CXmlNode.WriteLink(msg.Id, SegConstants.Messages, aParameters.Writer);
            }
        }
コード例 #5
0
        protected override void XmlSerializeChildren(CrashXmlPlugin.FileFormat.Document.CXmlDocumentSerializationParameters aParameters)
        {
            CIElementList <CIStack> stacks = aParameters.Container.ChildrenByType <CIStack>(CIElement.TChildSearchType.EEntireHierarchy);

            foreach (CIStack stack in stacks)
            {
                CXmlStack xmlStack = new CXmlStack(stack);
                xmlStack.XmlSerialize(aParameters);
            }
        }
コード例 #6
0
        protected override void XmlSerializeChildren(CrashXmlPlugin.FileFormat.Document.CXmlDocumentSerializationParameters aParameters)
        {
            CIElementList <CIProcess> processes = aParameters.Container.ChildrenByType <CIProcess>(CIElement.TChildSearchType.EEntireHierarchy);

            foreach (CIProcess process in processes)
            {
                CXmlProcess xmlProcess = new CXmlProcess(process);
                xmlProcess.XmlSerialize(aParameters);
            }
        }
コード例 #7
0
        protected override void XmlSerializeChildren(CrashXmlPlugin.FileFormat.Document.CXmlDocumentSerializationParameters aParameters)
        {
            CIElementList <CIThread> threads = aParameters.Container.ChildrenByType <CIThread>(CIElement.TChildSearchType.EEntireHierarchy);

            foreach (CIThread thread in threads)
            {
                CXmlThread xmlThread = new CXmlThread(thread);
                xmlThread.XmlSerialize(aParameters);
            }
        }
コード例 #8
0
        protected override void XmlSerializeChildren(CrashXmlPlugin.FileFormat.Document.CXmlDocumentSerializationParameters aParameters)
        {
            CIElementList <CIRegisterVisualization> visList = aParameters.Container.ChildrenByType <CIRegisterVisualization>(CIElement.TChildSearchType.EEntireHierarchy);

            foreach (CIRegisterVisualization visualisation in visList)
            {
                CXmlValueInterpretation xmlVis = new CXmlValueInterpretation(visualisation);
                xmlVis.XmlSerialize(aParameters);
            }
        }
コード例 #9
0
        private void CreateImplicitCodeSegments(CIElementFinalizationParameters aParams)
        {
            CIElementList <CISymbol> children = base.ChildrenByType <CISymbol>(TChildSearchType.EEntireHierarchy);

            base.Trace(string.Format("[CIProcess] CreateImplicitCodeSegments() - children count: {1}, {0}", this, children.Count));
            //
            foreach (CISymbol symbol in children)
            {
                EnsureCodeSegmentExistsForSymbol(aParams, symbol);
            }
        }
コード例 #10
0
        internal void AddStacks(CIContainer aContainer)
        {
            CIElementList <CIStack> stacks = aContainer.ChildrenByType <CIStack>(CIElement.TChildSearchType.EEntireHierarchy);

            foreach (CIStack stack in stacks)
            {
                CXmlCallStack callStack = new CXmlCallStack();
                callStack.Read(stack);
                callStack.CleanStack();
                iCallStacks.Add(callStack);
            }
        }
コード例 #11
0
        private void BuildIndex()
        {
            CIElementList <CIMessage> messages = Container.ChildrenByType <CIMessage>(TChildSearchType.EEntireHierarchy);

            foreach (CIMessage message in messages)
            {
                if (!base.Contains(message.Id))
                {
                    base.Add(message);
                }
            }
        }
コード例 #12
0
        internal void AddRegisterLists(CIContainer aContainer)
        {
            CIElementList <CIRegisterListCollection> regListCols = aContainer.ChildrenByType <CIRegisterListCollection>(CIElement.TChildSearchType.EEntireHierarchy);

            foreach (CIRegisterListCollection regListCol in regListCols)
            {
                foreach (CIRegisterList regList in regListCol)
                {
                    iRegStorage.ReadRegisterData(regList);
                }
            }
        }
コード例 #13
0
        internal void AddPanicedProcess(CIContainer aContainer)
        {
            CIElementList <CIProcess> processes = aContainer.ChildrenByType <CIProcess>(CIElement.TChildSearchType.EEntireHierarchy);

            if (processes.Count > 1)
            {
                System.Console.WriteLine("Warning: CrashInfoFilePlugin found multiple processes. CI file output can handle only one process!");
            }
            foreach (CIProcess process in processes)
            {
                iProcess = process.Name;
                iUID     = process.Uids.MostSignificant;
            }
        }
コード例 #14
0
        protected override void XmlSerializeChildren(CrashXmlPlugin.FileFormat.Document.CXmlDocumentSerializationParameters aParameters)
        {
            CIElementList <CIRegisterListCollection> regListCols = aParameters.Container.ChildrenByType <CIRegisterListCollection>(CIElement.TChildSearchType.EEntireHierarchy);

            foreach (CIRegisterListCollection regListCol in regListCols)
            {
                foreach (CIRegisterList regList in regListCol)
                {
                    if (regList.Count > 0)
                    {
                        CXmlRegisterSet xmlRegList = new CXmlRegisterSet(regList);
                        xmlRegList.XmlSerialize(aParameters);
                    }
                }
            }
        }
コード例 #15
0
        private void XmlSerializeStacks(CrashXmlPlugin.FileFormat.Document.CXmlDocumentSerializationParameters aParameters)
        {
            // Find stacks
            CIElementList <CIStack> stacks = iThread.ChildrenByType <CIStack>();

            // Only write something if we have some entries
            if (stacks.Count > 0)
            {
                CXmlNode.WriteLinkListStart(aParameters.Writer, SegConstants.Stacks);
                foreach (CIStack item in stacks)
                {
                    CXmlNode.WriteLink(item.Id, SegConstants.Stacks, aParameters.Writer);
                }
                CXmlNode.WriteLinkListEnd(aParameters.Writer);
            }
        }
コード例 #16
0
        internal void AddThreadAndExitInfo(CIContainer aContainer)
        {
            CIElementList <CIThread> threads = aContainer.ChildrenByType <CIThread>(CIElement.TChildSearchType.EEntireHierarchy);

            if (threads.Count > 1)
            {
                System.Console.WriteLine("Warning: XmlFilePlugin found multiple threads. XML file output can handle only one thread!");
            }
            foreach (CIThread thread in threads)
            {
                iPanicCategory     = thread.ExitInfo.Category;
                iPanicID           = thread.ExitInfo.Reason;
                iPanicDescription  = XmlErrorLibrary.GetPanicDescription(iPanicCategory, iPanicID.ToString());
                iCrashedModuleName = thread.FullName;
            }
        }
コード例 #17
0
        internal void AddMemoryInfo(CIContainer aContainer)
        {
            CIElementList <CIMemoryInfo> list = aContainer.ChildrenByType <CIMemoryInfo>(CIElement.TChildSearchType.EEntireHierarchy);

            foreach (CIMemoryInfo info in list)
            {
                if (info.Type == CIMemoryInfo.TType.ETypeRAM)
                {
                    iFreeMomery = info.Free;
                }
                if (info.Type == CIMemoryInfo.TType.ETypeDrive)
                {
                    iDiskInfo = info.Free;
                }
            }
        }
コード例 #18
0
        public override void Check(CIContainer aContainer)
        {
            CIElementList <CICodeSeg> allCodeSegs = aContainer.ChildrenByType <CICodeSeg>(CIElement.TChildSearchType.EEntireHierarchy);

            foreach (CICodeSeg codeSeg in allCodeSegs)
            {
                bool isResolved = codeSeg.IsResolved;
                if (!isResolved)
                {
                    CreateMissingWarning(codeSeg);
                }
                if (codeSeg.IsMismatched)
                {
                    CreateMismatchWarning(codeSeg);
                }
            }
        }
コード例 #19
0
        internal override void DoFinalize(CIElementFinalizationParameters aParams, Queue <CIElement> aCallBackLast, bool aForceFinalize)
        {
            CIContainer container = base.Container;

            // Find all the stacks and add them as children before we call the base class
            // method, since the base class will then take care of finalizing the new dynamically created
            // summarisable objects.
            CIElementList <CIStack> stacks = container.ChildrenByType <CIStack>(TChildSearchType.EEntireHierarchy);

            if (stacks != null && stacks.Count > 0)
            {
                foreach (CIStack stack in stacks)
                {
                    CISummarisableEntity entity = this[stack];
                    if (entity == null)
                    {
                        entity = new CISummarisableEntity(stack);
                        AddChild(entity);
                    }
                }
            }

            // Now, make sure there are summarisable wrappers created for any threads which do not have associated
            // stacks. Call stacks will be unavailable, but there's still plenty of useful information at the thread
            // process and register levels.
            CIElementList <CIThread> threads = container.ChildrenByType <CIThread>(TChildSearchType.EEntireHierarchy);

            if (threads != null && threads.Count > 0)
            {
                foreach (CIThread thread in threads)
                {
                    CISummarisableEntity entity = this[thread];
                    if (entity == null)
                    {
                        entity = new CISummarisableEntity(thread);
                        AddChild(entity);
                    }
                }
            }

            // Now run finalizers on children et al.
            base.DoFinalize(aParams, aCallBackLast, aForceFinalize);
        }
コード例 #20
0
        protected override void XmlSerializeChildren(CrashXmlPlugin.FileFormat.Document.CXmlDocumentSerializationParameters aParameters)
        {
            // Get the code segments
            CIElementList <CICodeSeg> codeSegs = aParameters.Container.ChildrenByType <CICodeSeg>(CIElement.TChildSearchType.EEntireHierarchy);

            // Sort them
            Comparison <CICodeSeg> comparer = delegate(CICodeSeg aLeft, CICodeSeg aRight)
            {
                return(string.Compare(aLeft.Name, aRight.Name, true));
            };

            codeSegs.Sort(comparer);

            // List them
            foreach (CICodeSeg codeSeg in codeSegs)
            {
                CXmlCodeSeg xmlCodeSeg = new CXmlCodeSeg(codeSeg);
                xmlCodeSeg.XmlSerialize(aParameters);
            }
        }
コード例 #21
0
        protected override void XmlSerializeChildren(CrashXmlPlugin.FileFormat.Document.CXmlDocumentSerializationParameters aParameters)
        {
            // First partition the symbols into sets
            CISymbolDictionary globalSymbols = aParameters.Container.Symbols;

            Partition(globalSymbols);

            // Also get the dictionaries from the individual processes
            CIElementList <CIProcess> processes = aParameters.Container.ChildrenByType <CIProcess>();

            foreach (CIProcess process in processes)
            {
                CISymbolDictionary processSymbols = process.Symbols;
                Partition(processSymbols);
            }

            // Then serialize the sets
            foreach (KeyValuePair <string, CXmlSymbolSet> kvp in iSets)
            {
                CXmlSymbolSet set = kvp.Value;
                set.XmlSerialize(aParameters);
            }
        }
コード例 #22
0
        internal void AddCodeSegments(CIContainer aContainer)
        {
            // Get the code segments
            CIElementList <CICodeSeg> codeSegs = aContainer.ChildrenByType <CICodeSeg>(CIElement.TChildSearchType.EEntireHierarchy);

            // Sort them
            Comparison <CICodeSeg> comparer = delegate(CICodeSeg aLeft, CICodeSeg aRight)
            {
                return(string.Compare(aLeft.Name, aRight.Name, true));
            };

            codeSegs.Sort(comparer);

            // List them
            foreach (CICodeSeg codeSeg in codeSegs)
            {
                uint   start = codeSeg.Range.Min;
                uint   end   = codeSeg.Range.Max;
                string name  = codeSeg.Name;

                CXmlCodeSegItem ciCodeSeg = new CXmlCodeSegItem(start, end, name);
                iCodeSegs.Add(ciCodeSeg);
            }
        }
コード例 #23
0
        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            CIElementList <CIStackEntry> entries = base.ChildrenByType <CIStackEntry>();

            return(entries.GetEnumerator());
        }
コード例 #24
0
        public new IEnumerator <CIStackEntry> GetEnumerator()
        {
            CIElementList <CIStackEntry> entries = base.ChildrenByType <CIStackEntry>();

            return(entries.GetEnumerator());
        }
コード例 #25
0
        public IEnumerable <CISummarisableEntity> GetSummarisableEnumerator()
        {
            CIElementList <CISummarisableEntity> list = base.ChildrenByType <CISummarisableEntity>();

            return(list);
        }
コード例 #26
0
 internal CIMessageDictionary(CIElementList <CIMessage> aList)
     : this(aList.Container)
 {
     base.AddRange(aList.ToArray());
 }