如何获取代码或堆栈跟踪?

时间:2011-04-13 16:44:38

标签: c# visual-studio web-config

我试图弄清楚某些代码的执行路径(即它命中的方法和顺序)。是否有工具,或通过visual studio或web.config来显示程序正在运行的函数的顺序?

现在我在某些区域放置调试点并希望它能够到达正确的区域,但在某些情况下,这是一个漫长而缓慢的繁琐过程。

5 个答案:

答案 0 :(得分:2)

某些.NET分析工具可以提供这种分析(通常称为调用图分析)。我所知道的是ANTS profiler

但是,如果您正在寻找每个执行方法的详细跟踪以及传递了哪些参数 - 您可能会发现很难使用任何工具。如果这是您实际需要的,您可能需要使用PostSHARP之类的工具在每个方法调用上编写跟踪逻辑(您可以使用MethodBoundaryAspect)。

答案 1 :(得分:2)

如果您正在尝试找出调用特定方法的代码,可以尝试使用System.Diagnostics.StackFrame:

var s = new System.Diagnostics.StackFrame();
Console.WriteLine(s.ToString());

StackFrame将为您提供当前线程的堆栈跟踪 请参阅MSDN:http://msdn.microsoft.com/en-us/library/system.diagnostics.stackframe.aspx

如果您正在寻找更多细节,那么分析器可能是更好的选择。我曾经使用过JetBrains的dotTrace,它确实提供了很多细节。

编辑:
ASP.NET还提供tracing功能。如果将以下内容添加到web.config:

<system.web>
    <trace enabled="true" />
    ...
</system.web>

然后将Trace="true"添加到您的页面指令:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MyPage.aspx.cs" Trace="true" %>

然后当你查看它时,你会得到一堆追踪输出到你的页面底部。

希望有所帮助。

答案 2 :(得分:0)

答案 3 :(得分:0)

好吧,我总是使用的一种方法是在函数中添加printfOutputDebugString(假设你有源代码)。您可以通过使用某些条件定义使这些调试信息仅显示在调试版本中。

答案 4 :(得分:0)

Runtime Flow(由我开发)显示了.NET程序正在执行的函数的顺序。