public override void AnalyzeModule(SDModule module) { if (SDTag.ContainsAgentName(module.FileName)) { module.Tags.Add(SDTag.DynatraceAgentTag); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject item = JObject.Load(reader); var tag = JsonConvert.DeserializeObject <SDTag>(item.ToString()); return(SDTag.FixUpTagType(tag)); }
public string Output() { string str = "¬".CRL(); str += string.Format(@"{0}{1}{2}{3}{4}{5}{6}", nameTag + "\t", externalName.CRL(2), LDTag.CRL(), longDescr.CRL(2), SDTag.CRL(), shortDescr.CRL(2), div.CRL(2)); return str; }
/// <summary> /// if <paramref name="func"/> returns true, set <paramref name="tag"/> on frame and thread /// </summary> private bool AddFrameAndThreadTagIf(SDThread thread, SDCombinedStackFrame frame, Func <bool> func, SDTag tag) { if (!func()) { return(false); } frame.Tags.Add(tag); thread.Tags.Add(tag); return(true); }
private static void AddTagToFrameAndThread(SDResult result, SDTag tag) { result.ThreadInformation[1].Tags.Add(tag); result.ThreadInformation[1].StackTrace[0].Tags.Add(tag); }
public void Analyze() { // modules foreach (var module in res.SystemContext.Modules) { if (SDTag.ContainsAgentName(module.FileName)) { module.Tags.Add(SDTag.DynatraceAgentTag); } } // threads foreach (var thread in res.ThreadInformation.Values) { // stackframes foreach (var frame in thread.StackTrace) { if (IsNativeExceptionMethodFrame(frame)) { frame.Tags.Add(SDTag.NativeExceptionTag); thread.Tags.Add(SDTag.NativeExceptionTag); } if (IsExceptionFrame(frame)) { frame.Tags.Add(SDTag.ExceptionInStackTag); thread.Tags.Add(SDTag.ExceptionInStackTag); } if (ContainsAny(frame.MethodName, "Thread::WaitSuspendEvents")) { frame.Tags.Add(SDTag.ClrThreadSuspend); thread.Tags.Add(SDTag.ClrThreadSuspend); } if (ContainsAny(frame.MethodName, "GCHeap::WaitUntilGCComplete") || ContainsAny(frame.MethodName, "SVR::gc_heap::wait_for_gc_done")) { frame.Tags.Add(SDTag.ClrWaitForGc); thread.Tags.Add(SDTag.ClrWaitForGc); } if (ContainsAny(frame.MethodName, "gc_heap::gc_thread_stub")) { frame.Tags.Add(SDTag.ClrGcThread); thread.Tags.Add(SDTag.ClrGcThread); } if (ContainsAny(frame.MethodName, "_CrtDbgReport")) { frame.Tags.Add(SDTag.AssertionErrorTag); thread.Tags.Add(SDTag.AssertionErrorTag); } if (IsDynatraceAgentFrame(frame)) { frame.Tags.Add(SDTag.DynatraceAgentTag); thread.Tags.Add(SDTag.DynatraceAgentTag); } } // managed exception if (thread.LastException != null) { thread.Tags.Add(SDTag.ManagedExceptionTag); } } // last executing if (res.ThreadInformation.ContainsKey(res.LastExecutedThread)) { res.ThreadInformation[res.LastExecutedThread].Tags.Add(SDTag.LastExecutingTag); } // last event if (res.LastEvent.Description.StartsWith("CLR exception")) { res.ThreadInformation.Values.Single(t => t.EngineId == res.LastEvent.ThreadId).Tags.Add(SDTag.ManagedExceptionTag); } else if (res.LastEvent.Description.StartsWith("Access violation")) { res.ThreadInformation.Values.Single(t => t.EngineId == res.LastEvent.ThreadId).Tags.Add(SDTag.NativeExceptionTag); } else if (res.LastEvent.Description.StartsWith("Break instruction exception")) { res.ThreadInformation.Values.Single(t => t.EngineId == res.LastEvent.ThreadId).Tags.Add(SDTag.BreakInstructionTag); } }
/// <summary> /// if <paramref name="func"/> returns true, set <paramref name="tag"/> on frame and thread /// </summary> private bool AddTagIfModuleContains(SDModule module, Func <string, bool> func, SDTag tag) { if (!func(module.FileName)) { return(false); } module.Tags.Add(tag); return(true); }
/// <summary> /// if <paramref name="func"/> returns true, set <paramref name="tag"/> on frame and thread /// </summary> private bool AddTagIfFrameContains(SDThread thread, SDCombinedStackFrame frame, Func <string, bool> func, SDTag tag) { if (!func(frame.ModuleName + frame.Type.ToString() + frame.MethodName)) { return(false); } frame.Tags.Add(tag); thread.Tags.Add(tag); return(true); }