2015-02-05 70 views
1

我想知道是否有任何方法可以返回Visual Studio在运行程序时所需的路径。例如,如果没有设置断点,是否可以确切知道当我点击我创建的Web应用程序上的按钮时会发生什么?就像如果我点击一个有动作的按钮,是否有Visual Studio可以吐出的某种信息告诉我发生了什么? (哪些函数在哪些文件中被使用,等等。实质上是“代码路径”)。调试:获取执行路径

要添加到我的问题,我想使用类似的东西来帮助调试问题。我想知道当我执行某种操作时发生了什么(在我的示例中单击按钮)。如果我知道每一条“代码路径”,我都可以更好地解决我遇到的问题。

+1

您可以使用性能分析器,该分析器旨在创建这些跟踪。 – adv12 2015-02-05 17:21:50

+0

你有许多不同的执行路径吗?你知道为什么你“知道”比知道执行路径更感兴趣吗? – 2015-02-05 17:52:17

回答

1

如果我理解正确的话你的问题,你正在寻找Environment.StackTrace

堆栈跟踪属性列表方法调用按时间倒序排列,也就是最新的方法调用首先描述,和一个线列出堆栈中每个方法调用的堆栈跟踪信息。但是,由于优化过程中发生代码转换,StackTrace属性可能无法报告预期的方法调用数量。

您可以做的其他事情是添加调试日志条目以了解正在发生的事情。这可能会更有用,因为您可以添加额外的自定义数据。

不确定您的项目是否已经有日志框架。如果你没有任何log4net的可能是一个不错的选择

+0

...除OP希望从按钮单击开始追踪并查看代码所在的位置,这比从代码中的下一级倾倒堆栈跟踪更难(因为后者假定您事先知道哪些点向下执行路径)。 – adv12 2015-02-05 17:21:25

+0

@ adv12:确实会有更多的数据,但要求路径应该在那里。这是我知道获取这些信息的最简单的方法。 – 2015-02-05 17:26:50

+0

@ adv12:增加了另一种选择:使用日志框架。我相信这将是最好的,因为他可以添加额外的数据来理解为什么要遵循特定的路径。 – 2015-02-05 17:32:50

0

我的评论转换为一个答案所以,解决原来的问题的答案:

使用性能分析器,其目的是观察执行路径(通常是为了帮助您找到瓶颈等,但它也可以为您的目的正常工作)。一个好的性能分析器可以让你挖掘并查看,对于任何方法,它调用的方法,频率等。

0

您可以将调用堆栈结果打印到Visual Studio中的输出窗口。您仍然需要使用断点,但不会停止应用程序的断点。要做到这一点:

  1. 当你想打印出堆栈时,在你的代码中找到这个地方。例如在按钮点击处理程序结束时。
  2. 在那里放置一个中断点。
  3. 右键单击断点。从上下文菜单中选择“When Hit ...”选项。
  4. 在出现的窗口中选择“打印信息:”复选框。它将启用一个文本框。在文本框中键入:$CALLSTACK
  5. 如果您不想在打印结果时停止执行,请选中“继续执行”复选框。

我不记得Express版的Visual Studio中是否有“When Hit ...”选项。

还有一些其他数据可以在不中断执行的情况下打印出来,例如:以前的函数,进程ID等等。细节实际上可以在“When Hit ...”窗口中找到。