public override void AnalyzeFrame(SDThread thread, SDCombinedStackFrame frame)
 {
     if (frame.MethodName == null)
     {
         return;
     }
     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);
     }
 }
Exemple #2
0
        public override void AnalyzeFrame(SDThread thread, SDCombinedStackFrame frame)
        {
            if (frame.MethodName == null)
            {
                return;
            }

            AddTagIfFrameContains(thread, frame, x => ContainsAny(frame.MethodName, "exception"), SDTag.ExceptionInStackTag);

            bool hasAddedSpecialAgentTag = false;

            hasAddedSpecialAgentTag |= AddTagIfFrameContains(thread, frame, ContainsPhpAgentModule, SDTag.DynatracePhpAgentTag);
            hasAddedSpecialAgentTag |= AddTagIfFrameContains(thread, frame, ContainsJavaAgentModule, SDTag.DynatraceJavaAgentTag);
            hasAddedSpecialAgentTag |= AddTagIfFrameContains(thread, frame, ContainsDotnetAgentModule, SDTag.DynatraceDotNetAgentTag);
            hasAddedSpecialAgentTag |= AddTagIfFrameContains(thread, frame, ContainsProcessAgentModule, SDTag.DynatraceProcessAgentTag);
            hasAddedSpecialAgentTag |= AddTagIfFrameContains(thread, frame, ContainsIisAgentModule, SDTag.DynatraceIisAgentTag);
            hasAddedSpecialAgentTag |= AddTagIfFrameContains(thread, frame, ContainsLogAgentModule, SDTag.DynatraceLogAgentTag);
            hasAddedSpecialAgentTag |= AddTagIfFrameContains(thread, frame, ContainsOsAgentModule, SDTag.DynatraceOsAgentTag);
            hasAddedSpecialAgentTag |= AddTagIfFrameContains(thread, frame, ContainsPluginAgentModule, SDTag.DynatracePluginAgentTag);
            hasAddedSpecialAgentTag |= AddTagIfFrameContains(thread, frame, ContainsNetworkAgentModule, SDTag.DynatraceNetworkAgentTag);
            hasAddedSpecialAgentTag |= AddTagIfFrameContains(thread, frame, ContainsNginxAgentModule, SDTag.DynatraceNginxAgentTag);
            hasAddedSpecialAgentTag |= AddTagIfFrameContains(thread, frame, ContainsVarnishAgentModule, SDTag.DynatraceVarnishAgentTag);
            hasAddedSpecialAgentTag |= AddTagIfFrameContains(thread, frame, ContainsWatchdogFrame, SDTag.DynatraceWatchdogTag);
            hasAddedSpecialAgentTag |= AddTagIfFrameContains(thread, frame, ContainsNodeAgentModule, SDTag.DynatraceNodeAgentTag);
            hasAddedSpecialAgentTag |= AddTagIfFrameContains(thread, frame, ContainsAgentLoaderModule, SDTag.DynatraceAgentLoaderTag);

            if (!hasAddedSpecialAgentTag)
            {
                // if no special agent has been detected, add generic dynatrace agent tag
                AddTagIfFrameContains(thread, frame, ContainsDynatraceModule, SDTag.DynatraceAgentTag);
            }
        }
Exemple #3
0
 public override void AnalyzeFrame(SDThread thread, SDCombinedStackFrame frame)
 {
     if (IsNativeExceptionMethodFrame(frame))
     {
         frame.Tags.Add(SDTag.NativeExceptionTag);
         thread.Tags.Add(SDTag.NativeExceptionTag);
     }
 }
 private bool IsDynatraceAgentFrame(SDCombinedStackFrame frame)
 {
     return(ContainsAny(frame.ModuleName + frame.Type.ToString() + frame.MethodName,
                        "oneagent",
                        "dtagent",
                        "ruxitagent",
                        "dtiisagent",
                        "dtapacheagent"
                        ));
 }
Exemple #5
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 #6
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);
        }
Exemple #7
0
 public override void AnalyzeFrame(SDThread thread, SDCombinedStackFrame frame)
 {
     AddFrameAndThreadTagIf(thread, frame, () => frame.MethodName == "_purecall", SDTag.PureCallTag);
     AddFrameAndThreadTagIf(thread, frame, () => frame.MethodName == "abort", SDTag.AbortTag);
     AddFrameAndThreadTagIf(thread, frame, () => frame.MethodName == "__CxxCallCatchBlock", SDTag.ExceptionCatchTag);
     AddFrameAndThreadTagIf(thread, frame, () => frame.MethodName == "RcCosolidateFrames", SDTag.ExceptionCatchTag);
     AddFrameAndThreadTagIf(thread, frame, () => frame.MethodName == "RtlRaiseException", SDTag.NativeExceptionTag);
     AddFrameAndThreadTagIf(thread, frame, () => frame.MethodName == "RtlReportException", SDTag.NativeExceptionTag);
     AddFrameAndThreadTagIf(thread, frame, () => frame.MethodName == "__report_gsfailure", SDTag.BufferOverrunTag);
     AddFrameAndThreadTagIf(thread, frame, () => frame.MethodName == "__chkstk", SDTag.StackOverflowTag);
 }
Exemple #8
0
 private bool IsNativeExceptionMethodFrame(SDCombinedStackFrame frame)
 {
     return(ContainsAny(frame.Type.ToString() + frame.MethodName,
                        "KiUserExceptionDispatcher",
                        "KiUserExceptionDispatch",
                        "RtlRaiseException",
                        "RtlReportException",
                        "RaiseException",
                        "RaiseFailFastException",
                        "UnhandledExceptionFilter",
                        "DbgBreakPoint"
                        ));
 }
Exemple #9
0
 public override void AnalyzeFrame(SDThread thread, SDCombinedStackFrame frame)
 {
     if (IsExceptionFrame(frame))
     {
         frame.Tags.Add(SDTag.ExceptionInStackTag);
         thread.Tags.Add(SDTag.ExceptionInStackTag);
     }
     if (IsDynatraceAgentFrame(frame))
     {
         frame.Tags.Add(SDTag.DynatraceAgentTag);
         thread.Tags.Add(SDTag.DynatraceAgentTag);
     }
 }
Exemple #10
0
        /// <summary>
        /// gets stack traces for each thread
        /// </summary>
        private void GetCombinedStackTraces()
        {
            // get stacktrace of each thread
            // ((IDebugSymbols2)this.debugClient).SetSymbolOptions(SYMOPT.LOAD_ANYTHING);
            foreach (SDThread thread in this.threads.Values)
            {
                var trace = new CombinedStackTrace(thread.EngineId, thread.OsId, thread.IsManagedThread, this.debugClient, this.context);
                // wrap to SDCombinedStackTrace
                IList <SDCombinedStackFrame> t = new List <SDCombinedStackFrame>();
                ulong lastStackPtr             = 0;
                int   i = 0;
                foreach (CombinedStackFrame frame in trace)
                {
                    ulong stackPtrOffset;
                    if (lastStackPtr == 0)
                    {
                        stackPtrOffset = 0;                         // think about diffing with rsp register
                    }
                    else
                    {
                        stackPtrOffset = frame.StackPointer - lastStackPtr;
                    }

                    var newFrame = new SDCombinedStackFrame(frame.Type,
                                                            frame.ModuleName,
                                                            frame.MethodName,
                                                            frame.OffsetInMethod,
                                                            frame.InstructionPointer,
                                                            frame.StackPointer,
                                                            frame.ReturnOffset,
                                                            stackPtrOffset,
                                                            frame.SourceInfo);
                    if (frame.LinkedStackFrame != null)
                    {
                        newFrame.LinkedStackFrame = new SDCombinedStackFrame(frame.LinkedStackFrame.Type,
                                                                             frame.LinkedStackFrame.ModuleName,
                                                                             frame.LinkedStackFrame.MethodName,
                                                                             frame.LinkedStackFrame.OffsetInMethod,
                                                                             frame.LinkedStackFrame.InstructionPointer,
                                                                             frame.LinkedStackFrame.StackPointer,
                                                                             frame.LinkedStackFrame.ReturnOffset,
                                                                             stackPtrOffset,
                                                                             frame.SourceInfo);
                    }
                    lastStackPtr = frame.StackPointer;
                    t.Add(newFrame);
                    i++;
                }
                thread.StackTrace = new SDCombinedStackTrace(t);
            }
        }
        private async Task AddSourceInfoAsync(SDCombinedStackFrame stackFrame, SDCDModule module)
        {
            Tuple <SDFileAndLineNumber, string> methodSource = await Address2MethodSourceAsync(stackFrame.InstructionPointer, module);

            SDFileAndLineNumber sourceInfo = methodSource.Item1;
            string methodName = methodSource.Item2;

            if (methodName != "??")
            {
                stackFrame.MethodName = methodName;
                if (sourceInfo.File != null && sourceInfo.File != "??")
                {
                    stackFrame.SourceInfo = sourceInfo;
                }
            }
        }
Exemple #12
0
 public override void AnalyzeFrame(SDThread thread, SDCombinedStackFrame frame)
 {
     AddFrameAndThreadTagIf(thread, frame, () => frame.MethodName == "_purecall", SDTag.PureCallTag);
     AddFrameAndThreadTagIf(thread, frame, () => frame.MethodName == "abort", SDTag.AbortTag);
 }
Exemple #13
0
 private static bool FrameEquals(SDCombinedStackFrame frameA, SDCombinedStackFrame frameB)
 {
     return(EqualsIgnoreNonAscii(frameA.ModuleName, frameB.ModuleName) &&
            EqualsIgnoreNonAscii(frameA.MethodName, frameB.MethodName));
 }
 public virtual void AnalyzeFrame(SDThread thread, SDCombinedStackFrame frame)
 {
 }
Exemple #15
0
 private bool IsNativeExceptionMethodFrame(SDCombinedStackFrame frame)
 {
     return(frame.ModuleName.StartsWith("libc") && ContainsAny(frame.MethodName, "gsignal", "abort", "raise"));
 }
 private bool IsExceptionFrame(SDCombinedStackFrame frame)
 {
     return(ContainsAny(frame.MethodName, "exception"));
 }
Exemple #17
0
 /// <summary>
 /// return true, if frame name contains any of the <paramref name="names"/>
 /// </summary>
 private bool FrameContainsName(SDCombinedStackFrame frame, params string[] names)
 {
     return(ContainsAny(frame.ModuleName + frame.Type.ToString() + frame.MethodName, names));
 }