public virtual string ComputeFailureHash(Exception failureException) { string result; WatsonExceptionReport.TryStringHashFromStackTrace(failureException, false, out result); return(result); }
protected override void WriteSpecializedPartOfTextReport(TextWriter reportFile) { base.WriteReportFileHeader(reportFile, "CLR is " + (base.IsFlagSet(ReportOptions.ReportTerminateAfterSend) ? string.Empty : "not ") + "terminating"); reportFile.WriteLine("P1(flavor)={0}", base.BucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.Flavor)); reportFile.WriteLine("P2(appVersion)={0}", base.BucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.AppVersion)); reportFile.WriteLine("P3(appName)={0}", base.BucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.AppName)); reportFile.WriteLine("P4(assemblyName)={0}", base.BucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.AssemblyName)); reportFile.WriteLine("P5(exMethodName)={0}", base.BucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.ExMethodName)); reportFile.WriteLine("P6(exceptionType)={0}", base.BucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.ExceptionType)); reportFile.WriteLine("P7(callstackHash)={0}", base.BucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.CallstackHash)); reportFile.WriteLine("P8(assemblyVer)={0}", base.BucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.AssemblyVer)); reportFile.WriteLine(); reportFile.WriteLine("Exchange Version={0}", WatsonReport.ExchangeFormattedVersion(ExWatson.ExchangeVersion)); reportFile.WriteLine("Default Assembly Version={0}", WatsonReport.ExchangeFormattedVersion(ExWatson.DefaultAssemblyVersion)); reportFile.WriteLine("Executable Name={0}", WatsonReport.GetValidString(ExWatson.RealAppName)); reportFile.WriteLine("Executable Version={0}", WatsonReport.ExchangeFormattedVersion(ExWatson.RealApplicationVersion)); reportFile.WriteLine("Base Exception Target Site={0}", this.baseExceptionTargetSite); reportFile.WriteLine("Base Exception Assembly name={0}", this.baseExceptionAssemblyName); reportFile.WriteLine("Base Exception Method Name={0}", this.baseExceptionMethodName); reportFile.WriteLine("Exception Message={0}", this.exception.Message); reportFile.WriteLine("EIP=0x{0}", (IntPtr.Size == 4) ? this.exceptionEIP.ToString("x8") : this.exceptionEIP.ToString("x16")); reportFile.WriteLine("Build bit-size={0}", IntPtr.Size * 8); WatsonExceptionReport.WriteReportFileLIDs(reportFile, this.lids); WatsonExceptionReport.WriteReportFileExceptionObjectInfo(reportFile, this.exception); WatsonExceptionReport.WriteReportFileInnerExceptionObjectsInfo(reportFile, this.exception); WatsonExceptionReport.WriteReportFileStackTrace(reportFile, this.exception); WatsonExceptionReport.WriteReportFileLIDs(reportFile, this.lids); WatsonExceptionReport.WriteReportFileInnerExceptionObjectsInfo(reportFile, this.exception); }
protected override void AddExtraFiles(WerSafeHandle watsonReportHandle) { if (base.ReportingAllowed && !base.ProcessHandle.IsInvalid && !base.IsFlagSet(ReportOptions.DoNotCollectDumps)) { if (WatsonExceptionReport.beforeDumpCollectionAction != null) { WatsonExceptionReport.beforeDumpCollectionAction(); } DiagnosticsNativeMethods.WER_DUMP_CUSTOM_OPTIONS wer_DUMP_CUSTOM_OPTIONS = new DiagnosticsNativeMethods.WER_DUMP_CUSTOM_OPTIONS(); wer_DUMP_CUSTOM_OPTIONS.size = Marshal.SizeOf(typeof(DiagnosticsNativeMethods.WER_DUMP_CUSTOM_OPTIONS)); wer_DUMP_CUSTOM_OPTIONS.mask = DiagnosticsNativeMethods.WER_DUMP_FLAGS.WER_DUMP_MASK_DUMPTYPE; wer_DUMP_CUSTOM_OPTIONS.dumpFlags = (DiagnosticsNativeMethods.MINIDUMP_TYPE.MiniDumpWithDataSegs | DiagnosticsNativeMethods.MINIDUMP_TYPE.MiniDumpWithHandleData | DiagnosticsNativeMethods.MINIDUMP_TYPE.MiniDumpWithUnloadedModules | DiagnosticsNativeMethods.MINIDUMP_TYPE.MiniDumpWithProcessThreadData | DiagnosticsNativeMethods.MINIDUMP_TYPE.MiniDumpWithPrivateReadWriteMemory); DiagnosticsNativeMethods.WerReportAddDump(watsonReportHandle, base.ProcessHandle, IntPtr.Zero, DiagnosticsNativeMethods.WER_DUMP_TYPE.WerDumpTypeMiniDump, this.exceptionInfo, wer_DUMP_CUSTOM_OPTIONS, 0U); DiagnosticsNativeMethods.WER_DUMP_CUSTOM_OPTIONS wer_DUMP_CUSTOM_OPTIONS2 = new DiagnosticsNativeMethods.WER_DUMP_CUSTOM_OPTIONS(); wer_DUMP_CUSTOM_OPTIONS2.size = Marshal.SizeOf(typeof(DiagnosticsNativeMethods.WER_DUMP_CUSTOM_OPTIONS)); wer_DUMP_CUSTOM_OPTIONS2.mask = DiagnosticsNativeMethods.WER_DUMP_FLAGS.WER_DUMP_MASK_DUMPTYPE; wer_DUMP_CUSTOM_OPTIONS2.dumpFlags = (wer_DUMP_CUSTOM_OPTIONS.dumpFlags | DiagnosticsNativeMethods.MINIDUMP_TYPE.MiniDumpWithFullMemory); DiagnosticsNativeMethods.WerReportAddDump(watsonReportHandle, base.ProcessHandle, IntPtr.Zero, DiagnosticsNativeMethods.WER_DUMP_TYPE.WerDumpTypeHeapDump, this.exceptionInfo, wer_DUMP_CUSTOM_OPTIONS2, 0U); } }
protected override void PrepareBucketingParameters() { Exception baseException = null; string s = null; string text = null; string text2 = null; string text3 = null; Version v = null; int num = 0; int num2 = 0; string text4 = null; if (this.exception != null) { text2 = this.exception.GetType().ToString(); WatsonExceptionReport.TryStringHashFromStackTrace(this.exception, base.IsFlagSet(ReportOptions.DeepStackTraceHash), out text3); baseException = this.exception.GetBaseException(); try { string text5 = (baseException == null) ? null : baseException.StackTrace; if (!string.IsNullOrEmpty(text5)) { MatchCollection matchCollection = WatsonExceptionReport.regexFunctions.Matches(text5); foreach (object obj in matchCollection) { Match match = (Match)obj; if (match.Groups.Count == 2) { if (text == null) { text = match.Groups[1].Value; } if (match.Groups[1].Value.Contains("Microsoft.")) { text = match.Groups[1].Value; if (text.IndexOf("throw", StringComparison.OrdinalIgnoreCase) <= 0 && text.IndexOf("failfast", StringComparison.OrdinalIgnoreCase) <= 0 && text.IndexOf("assert", StringComparison.OrdinalIgnoreCase) <= 0 && text.IndexOf("error", StringComparison.OrdinalIgnoreCase) <= 0) { break; } } } } } if (text != null) { string text6 = text; try { int num3 = text.LastIndexOf(Type.Delimiter + "."); if (num3 < 0) { num3 = text.LastIndexOf(Type.Delimiter); } text6 = text.Substring(0, num3); } catch { } Type type = Type.GetType(text6); if (type == null) { foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) { type = assembly.GetType(text6); if (type != null) { break; } } } if (type != null) { if (WatsonReport.IsAssemblyDynamic(type.Assembly)) { s = "[Dynamic Assembly]"; v = new Version(0, 0, 0, 0); } else { try { s = Path.GetFileName(type.Assembly.Location); } catch { } try { object[] customAttributes = type.Assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false); if (customAttributes.Length == 1) { AssemblyFileVersionAttribute assemblyFileVersionAttribute = customAttributes[0] as AssemblyFileVersionAttribute; if (assemblyFileVersionAttribute != null) { v = new Version(assemblyFileVersionAttribute.Version); } } } catch { } } } } PropertyInfo propertyInfo = (baseException == null) ? null : baseException.GetType().GetProperty("DiagCtx"); if (propertyInfo != null) { MethodInfo getMethod = propertyInfo.GetGetMethod(); object obj2 = getMethod.Invoke(baseException, null); this.lids = obj2.ToString(); MatchCollection matchCollection2 = WatsonExceptionReport.regexLids.Matches(this.lids); foreach (object obj3 in matchCollection2) { Match match2 = (Match)obj3; if (match2.Groups.Count >= 2) { string value = match2.Groups[0].Value; num = WatsonReport.ComputeHash(value, num); num2 = Convert.ToInt32(match2.Groups[1].Value); if (match2.Groups.Count == 4) { text4 = match2.Groups[3].Value; } } } num &= 65535; } if (ExWatson.MsInternal) { base.CrashDetails = WatsonReport.GetValidString(this.GetExWatsonCrashDetailsString()); } } catch { } } if (baseException != null && baseException.TargetSite != null) { this.baseExceptionTargetSite = base.EvaluateOrDefault <string>(delegate { RuntimeMethodHandle methodHandle = baseException.TargetSite.MethodHandle; IntPtr value2 = baseException.TargetSite.MethodHandle.Value; return(baseException.TargetSite.MethodHandle.Value.ToString()); }, "unknown"); this.baseExceptionAssemblyName = base.EvaluateOrDefault <string>(delegate { if (baseException.TargetSite.Module == null) { return("unknown"); } return(baseException.TargetSite.Module.Name ?? "unknown"); }, "unknown"); this.baseExceptionMethodName = base.EvaluateOrDefault <string>(delegate { string text7 = null; if (baseException.TargetSite.ReflectedType != null) { text7 = baseException.TargetSite.ReflectedType.FullName; } string name = baseException.TargetSite.Name; if (text7 == null || name == null) { return("unknown"); } return(text7 + "." + name); }, "unknown"); } else { this.baseExceptionTargetSite = "unknown"; this.baseExceptionAssemblyName = "unknown"; this.baseExceptionMethodName = "unknown"; } try { if (this.lids != null) { text3 = text3 + "-" + Convert.ToString(num, 16); this.baseExceptionAssemblyName = this.baseExceptionAssemblyName + "-" + num2; if (text4 != null) { text2 = text2 + "-" + text4; } } } catch { } base.SetBucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.ExceptionType, WatsonReport.GetValidString(text2)); base.SetBucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.AssemblyName, WatsonReport.GetValidString(s)); base.SetBucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.AssemblyVer, WatsonReport.ExchangeFormattedVersion(v)); base.SetBucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.ExMethodName, WatsonReport.GetValidString(text)); base.SetBucketingParameter <WatsonExceptionReport.BucketParamId>(WatsonExceptionReport.BucketParamId.CallstackHash, WatsonReport.GetValidString(text3)); }