public virtual string ComputeFailureHash(Exception failureException) { string result; WatsonExceptionReport.TryStringHashFromStackTrace(failureException, false, out result); return(result); }
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)); }