2011-04-13 24 views
1

我想找出一些代码的执行路径(即它击中的方法和顺序)。有没有工具,或通过视觉工作室或web.config的手段来显示程序正在经历的函数的顺序?如何获得代码或堆栈跟踪?

现在我正在调试点在某些地区,希望它击中了正确的区域,但在某些情况下,这是一个漫长而缓慢的乏味过程。

+1

“在某些情况下,这是一个漫长而缓慢的过程。” - 这是调试.... – hunter 2011-04-13 16:46:06

+0

有什么*特定*你正在寻找? – 2011-04-13 16:47:12

+0

具有讽刺意味的是,我甚至没有在正确的文件...我正在追逐烟雾和镜子:( – chobo 2011-04-13 17:59:51

回答

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" %> 

,那么你会得到附加的底部一堆跟踪输出的你当你查看它时,

希望有所帮助。

+0

我喜欢打电话给stackframe。快速简单,谢谢! – chobo 2011-04-13 17:58:03

+0

Np,很高兴我可以帮助。 – rsbarro 2011-04-13 18:05:00

2

一些.NET分析工具可以提供这种类型的分析(通常称为Call Graph Analysis)。我知道的一个是ANTS profiler。但是,如果您正在寻找每个执行的方法和传递参数的详细跟踪信息 - 您可能会发现使用任何工具都很难获得。如果这是您真正需要的,您可能需要使用像PostSHARP这样的工具编织每个方法调用的跟踪逻辑(您可以使用MethodBoundaryAspect来完成)。

0

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

+0

这是一种我正在尝试什么,这是我有一个PHP项目时使用的。 – chobo 2011-04-13 17:58:38

0

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