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

发布于 2024-11-01 06:19:25 字数 151 浏览 8 评论 0 原文

我试图找出某些代码的执行路径(即它命中了哪些方法以及以什么顺序)。是否有工具或方法通过 Visual Studio 或 web.config 来显示程序正在执行的函数的顺序?

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

I am trying to figure out the execution path for some code (i.e. which methods it hits and in what order). Is there a tool, or means through visual studio or the web.config to show the order of functions that a program is going through?

Right now I am placing debug points in certain areas and hoping it hits the right area, but in some cases this is a long slow tedious process.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

2024-11-08 06:19:25

如果您试图找出哪些代码正在调用特定方法,您可以尝试 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 还提供跟踪功能。如果将以下内容添加到 web.config:

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

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

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

那么当您查看它。

希望有帮助。

If you're trying to figure out what code is calling a particular method, you could try System.Diagnostics.StackFrame:

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

StackFrame will give you the stack trace for the current thread.
See MSDN: http://msdn.microsoft.com/en-us/library/system.diagnostics.stackframe.aspx

If you're looking for more detail than that then a profiler may be a better option for you. I've used dotTrace from JetBrains a bit and it does provide a lot of detail.

EDIT:
ASP.NET also provides tracing functionality. If you add the following to your web.config:

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

and then add Trace="true" to your page directive:

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

then you'll get a bunch of trace output appended to the bottom of your page when you view it.

Hope that helps.

梦冥 2024-11-08 06:19:25

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

但是,如果您正在寻找执行的每个方法以及传递的参数的详细跟踪 - 您可能会发现使用任何工具都很难获得。如果这就是您实际需要的,您可能需要使用像 PostSHARP 这样的工具来编织每个跟踪逻辑方法调用(可以使用 MethodBoundaryAspect 来执行)。

Some .NET profiling tools can provide this kind of analysis (often called Call Graph Analysis). One that I am aware of is the ANTS profiler.

However, if you're looking for a detailed trace of every method that is executed and what parameters were passed - you may find that hard to get with any tool. If that's what you actually need, you may need to use a tool like PostSHARP to weave in trace logic on each method call (which you can do with the MethodBoundaryAspect).

漫漫岁月 2024-11-08 06:19:25

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

Well, one method I always use is to add either printfor OutputDebugString in the functions (suppose you have the source code). You can make these debug information only show up in debug version by using some conditional definitions.

娇柔作态 2024-11-08 06:19:25

运行时流程(由我开发)显示 .NET 程序的函数顺序正在经历。

Runtime Flow (developed by me) shows the order of functions that a .NET program is going through.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文