Exemple #1
0
        public void CopyToContainer(CIContainer aContainer)
        {
            // Diagnostics never appear in the crash item itself.
            if (Type != TType.ETypeDiagnostic)
            {
                CIMessage msg = null;
                //
                if (Type == TType.ETypeMessage)
                {
                    msg = CIMessage.NewMessage(aContainer);
                }
                else if (Type == TType.ETypeWarning)
                {
                    msg = new CIMessageWarning(aContainer);
                }
                else if (Type == TType.ETypeError)
                {
                    msg = new CIMessageError(aContainer);
                }

                // Build details & add to container
                msg.Title       = this.Title;
                msg.Description = this.Description;
                aContainer.Messages.Add(msg);
            }
        }
        private void CreateMissingWarning(CICodeSeg aCodeSeg)
        {
            CIMessageWarning warning = new CIMessageWarning(aCodeSeg.Container, LibResources.CIPDCodeSegAvailability_NoSymbols_Title);

            warning.AddLineFormatted(LibResources.CIPDCodeSegAvailability_NoSymbols_Description, aCodeSeg, aCodeSeg.OwningProcess.Name);
            //
            aCodeSeg.AddChild(warning);
        }
Exemple #3
0
        protected void CreateWarning(CIContainer aContainer, CIElement aAssociatedElement, string aTitle, string aDescription)
        {
            CIMessageWarning message = new CIMessageWarning(aContainer, aTitle);

            message.Description = aDescription;
            //
            aAssociatedElement.AddChild(message);
        }
        private void CreateMismatchWarning(CICodeSeg aCodeSeg)
        {
            CIMessageWarning warning = new CIMessageWarning(aCodeSeg.Container, LibResources.CIPDCodeSegAvailability_CodeSegMisMatch_Title);

            warning.AddLineFormatted(LibResources.CIPDCodeSegAvailability_CodeSegMisMatch_Description_L1, aCodeSeg, aCodeSeg.OwningProcess.Name);
            warning.AddLineFormatted(LibResources.CIPDCodeSegAvailability_CodeSegMisMatch_Description_L2, aCodeSeg.Base, aCodeSeg.MismatchAddress);
            //
            aCodeSeg.AddChild(warning);
        }
Exemple #5
0
        private void ExtractThreadStack(CIThread aThread)
        {
            DExcExtractorListStackData stackDataList = (DExcExtractorListStackData)iData[DExcExtractorListType.EListStackData];
            DataBuffer stackData = stackDataList.StackData;

            // Get stack range details
            DExcExtractorListThreadInfo threadInfo = (DExcExtractorListThreadInfo)iData[DExcExtractorListType.EListThread];
            AddressRange stackRange = threadInfo.StackRange;

            // If we didn't get the stack range, we cannot create a stack entry
            if (!stackRange.IsValid || stackRange.Max == 0 || stackRange.Min == 0)
            {
                CIMessageWarning warning = new CIMessageWarning(aThread.Container, "Stack Address Range Unavailable");
                warning.AddLine("The stack address range details are invalid.");
                aThread.AddChild(warning);
            }
            else if (stackData.Count == 0)
            {
                // No stack data
                CIMessageWarning warning = new CIMessageWarning(aThread.Container, "Stack Data Unavailable");
                warning.AddLine("The crash details contain no stack data.");
                aThread.AddChild(warning);
            }
            else
            {
                // Set base address of data buffer if not already set
                if (stackData.AddressOffset == 0)
                {
                    stackData.AddressOffset = stackRange.Min;
                }

                // In theory, D_EXC only ever captures user-side crashes (panics/exceptions) therefore
                // we should always be able to assume that the stack data goes with a user-side thread.
                CIRegisterList userRegs = aThread.Registers[TArmRegisterBank.ETypeUser];
                if (userRegs != null)
                {
                    CIStack stack = aThread.CreateStack(userRegs, stackData, stackData.AddressOffset, stackRange);

                    // Register it as a specific crash instance
                    iContainer.AddChild(stack);
                }
            }
        }
Exemple #6
0
        private void StackEngine_MessageHandler(StackEngine.TMessageType aType, string aMessage, StackEngine aEngine)
        {
            switch (aType)
            {
            default:
                break;

            case StackEngine.TMessageType.ETypeError:
            {
                CIMessageError error = new CIMessageError(iStack.Container, LibResources.CIStackBuilder_Error_Title);
                error.AddLine(aMessage);
                iStack.AddChild(error);
                break;
            }

            case StackEngine.TMessageType.ETypeWarning:
            {
                CIMessageWarning warning = new CIMessageWarning(iStack.Container, LibResources.CIStackBuilder_Warning_Title);
                warning.AddLine(aMessage);
                iStack.AddChild(warning);
                break;
            }
            }
        }