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));
        }
Exemple #3
0
        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;
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
 private static void AddTagToFrameAndThread(SDResult result, SDTag tag)
 {
     result.ThreadInformation[1].Tags.Add(tag);
     result.ThreadInformation[1].StackTrace[0].Tags.Add(tag);
 }
Exemple #6
0
        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);
            }
        }
Exemple #7
0
        /// <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);
        }
Exemple #8
0
        /// <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);
        }