我想找出一些代码的执行路径(即它击中的方法和顺序)。有没有工具,或通过视觉工作室或web.config的手段来显示程序正在经历的函数的顺序?如何获得代码或堆栈跟踪?
现在我正在调试点在某些地区,希望它击中了正确的区域,但在某些情况下,这是一个漫长而缓慢的乏味过程。
我想找出一些代码的执行路径(即它击中的方法和顺序)。有没有工具,或通过视觉工作室或web.config的手段来显示程序正在经历的函数的顺序?如何获得代码或堆栈跟踪?
现在我正在调试点在某些地区,希望它击中了正确的区域,但在某些情况下,这是一个漫长而缓慢的乏味过程。
如果你试图找出哪些代码调用一个特定的方法,你可以尝试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" %>
,那么你会得到附加的底部一堆跟踪输出的你当你查看它时,
希望有所帮助。
一些.NET分析工具可以提供这种类型的分析(通常称为Call Graph Analysis)。我知道的一个是ANTS profiler。但是,如果您正在寻找每个执行的方法和传递参数的详细跟踪信息 - 您可能会发现使用任何工具都很难获得。如果这是您真正需要的,您可能需要使用像PostSHARP这样的工具编织每个方法调用的跟踪逻辑(您可以使用MethodBoundaryAspect来完成)。
那么,我总是使用的一种方法是在函数中添加printf
或OutputDebugString
(假设您有源代码)。通过使用一些条件定义,您可以使这些调试信息仅在调试版本中显示。
这是一种我正在尝试什么,这是我有一个PHP项目时使用的。 – chobo 2011-04-13 17:58:38
Runtime Flow(由我开发)显示了.NET程序正在执行的函数的顺序。
“在某些情况下,这是一个漫长而缓慢的过程。” - 这是调试.... – hunter 2011-04-13 16:46:06
有什么*特定*你正在寻找? – 2011-04-13 16:47:12
具有讽刺意味的是,我甚至没有在正确的文件...我正在追逐烟雾和镜子:( – chobo 2011-04-13 17:59:51