/** * Writes dictionary values. */ private static void WriteDictionaryValues(StreamWriter writer, CXmlDataBlock datablock) { writer.Write(PrettyString(XmlConsts.Kxml_panic_id, datablock.PanicId())); writer.Write(PrettyString(XmlConsts.Kxml_panic_category, datablock.PanicCategory())); writer.Write(PrettyString(XmlConsts.Kxml_panic_description, Regex.Replace(datablock.PanicDescription(), "<(.|\n)*?>", ""))); writer.Write(PrettyString(XmlConsts.Kxml_language, datablock.Language())); if (!datablock.Process().Equals(XmlConsts.Kxml_unknown_process)) { writer.Write(PrettyString(XmlConsts.Kxml_panicked_process, datablock.Process())); } writer.Write(PrettyString(XmlConsts.Kxml_network_country_code, datablock.NetworkCountry())); writer.Write(PrettyString(XmlConsts.Kxml_network_identity, datablock.NetworkIdentity())); writer.Write(PrettyString(XmlConsts.Kxml_s60version, datablock.S60Version())); writer.Write(PrettyString(XmlConsts.Kxml_product_code, datablock.ProductCode())); writer.Write(PrettyString(XmlConsts.Kxml_variant_version, datablock.VariantVersion())); if (datablock.ReportType() != string.Empty) { writer.Write(PrettyString(XmlConsts.Kxml_file_type, "1")); } else { writer.Write(PrettyString(XmlConsts.Kxml_file_type, "0")); } // Production mode if (datablock.ProductionMode() != -1) { if (datablock.ProductionMode() == 1) { writer.Write(PrettyString(XmlConsts.Kxml_production_mode, XmlConsts.Kxml_production_mode_value)); } else { writer.Write(PrettyString(XmlConsts.Kxml_production_mode, XmlConsts.Kxml_rnd_mode_value)); } } // Crash source if (datablock.CrashSource() != -1) { if (datablock.CrashSource() == 1) { writer.Write(PrettyString(XmlConsts.Kxml_crash_source, XmlConsts.Kxml_crash_source_user)); } else { writer.Write(PrettyString(XmlConsts.Kxml_crash_source, XmlConsts.Kxml_crash_source_kernel)); } } // Symbol file names if (datablock.SymbolFiles().Count > 0) { writer.Write(PrettyTitle(KTitleSymbolFileNames)); } foreach (string fileName in datablock.SymbolFiles()) { writer.WriteLine(fileName); } }
private static void WriteReportDetails(XmlWriter aOutput, CXmlDataBlock datablock) { // Device report details aOutput.WriteStartElement(XmlConsts.Kxml_report_details); aOutput.WriteAttributeString(XmlConsts.Kxml_timestamp, datablock.TimeStampText()); string crashtypestr = "Not found"; if (datablock.FileType() == XmlConsts.MobileCrashFileType.ETypeBasicCrash) { crashtypestr = XmlConsts.Kxml_type_crash; } else if (datablock.FileType() == XmlConsts.MobileCrashFileType.ETypeAliveMessage) { crashtypestr = XmlConsts.Kxml_type_alivemsg; } else if (datablock.FileType() == XmlConsts.MobileCrashFileType.ETypeCrashAPIReport) { crashtypestr = XmlConsts.Kxml_type_report; } else if (datablock.FileType() == XmlConsts.MobileCrashFileType.ETypeRegistrationMessage) { crashtypestr = XmlConsts.Kxml_type_regmsg; } aOutput.WriteAttributeString(XmlConsts.Kxml_type, crashtypestr); aOutput.WriteAttributeString(XmlConsts.Kxml_file_name, datablock.BinFilename()); if (crashtypestr.Equals(XmlConsts.Kxml_type_report)) { aOutput.WriteAttributeString(XmlConsts.Kxml_report_category, datablock.ReportCategory()); } if (crashtypestr.Equals(XmlConsts.Kxml_type_report)) { aOutput.WriteAttributeString(XmlConsts.Kxml_report_type, datablock.ReportType()); } if (datablock.CrashedModuleName() != string.Empty) { aOutput.WriteAttributeString(XmlConsts.Kxml_crashed_module, datablock.CrashedModuleName()); } if (datablock.Hash() != string.Empty) { aOutput.WriteAttributeString(XmlConsts.Kxml_defect_hash, datablock.Hash()); } if (datablock.DetailedHash() != string.Empty) { aOutput.WriteAttributeString(XmlConsts.Kxml_detailed_defect_hash, datablock.DetailedHash()); } if (datablock.TestSet() != string.Empty) { aOutput.WriteAttributeString(XmlConsts.Kxml_testset, datablock.TestSet()); } // Child elements for report details if (datablock.CodeSegs().Count > 0) { aOutput.WriteStartElement(XmlConsts.Kxml_loaded_dlls); } foreach (CXmlCodeSegItem codeseg in datablock.CodeSegs()) { aOutput.WriteStartElement(XmlConsts.Kxml_loaded_dll); aOutput.WriteAttributeString(XmlConsts.Kxml_name, codeseg.Name); aOutput.WriteAttributeString(XmlConsts.Kxml_start_address, codeseg.Start.ToString()); aOutput.WriteAttributeString(XmlConsts.Kxml_end_address, codeseg.End.ToString()); aOutput.WriteEndElement(); // loaded dll } if (datablock.CodeSegs().Count > 0) { aOutput.WriteEndElement(); // loaded dlls } // Traces if (datablock.RegStorage().BasicRegs().Registers.Count > 0 || datablock.CallStacks().Count > 0 || datablock.OstTraces().Count > 0 || datablock.Eventlog().Count > 0 || datablock.RegStorage().OtherRegLists().Count > 0 || datablock.PanicDescription() != String.Empty) { aOutput.WriteStartElement(XmlConsts.Kxml_traces); } WriteDetail(aOutput, XmlConsts.Kxml_register, datablock.RegStorage().BasicRegs().ToPrettyString()); // Extra registers System.Text.StringBuilder extraRegisters = new System.Text.StringBuilder(); foreach (CXmlRegisterStorage.CCrashInfoRegisterList registerList in datablock.RegStorage().OtherRegLists()) { extraRegisters.AppendLine(registerList.ToPrettyString()); } WriteDetail(aOutput, XmlConsts.Kxml_register_extra, extraRegisters.ToString()); // Call stack foreach (XmlFilePlugin.FileFormat.CXmlCallStack stack in datablock.CallStacks()) { WriteDetail(aOutput, XmlConsts.Kxml_call_stack_text, stack.ToString()); } // OST traces System.Text.StringBuilder ostTraces = new System.Text.StringBuilder(); foreach (string line in datablock.OstTraces()) { ostTraces.AppendLine(line); } WriteDetail(aOutput, XmlConsts.Kxml_trace_data, ostTraces.ToString()); // Event log System.Text.StringBuilder eventLog = new System.Text.StringBuilder(); foreach (string line in datablock.Eventlog()) { eventLog.AppendLine(line); } WriteDetail(aOutput, XmlConsts.Kxml_eventlog, eventLog.ToString()); // Panic description WriteDetail(aOutput, XmlConsts.Kxml_panic_description, datablock.PanicDescription()); if (datablock.RegStorage().BasicRegs().Registers.Count > 0 || datablock.CallStacks().Count > 0 || datablock.OstTraces().Count > 0 || datablock.Eventlog().Count > 0 || datablock.RegStorage().OtherRegLists().Count > 0 || datablock.PanicDescription() != String.Empty) { aOutput.WriteEndElement(); // traces } WriteDictionaryValues(aOutput, datablock); WriteUniqueValues(aOutput, datablock); aOutput.WriteEndElement(); // report details }