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); }
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); }
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); } } }
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; } } }