在不设置断点的情况下调试Visual Studio 2010中的所有事件

我正在尝试调试具有大量事件的Windows窗体应用程序:按钮按钮,计时器等。

有没有办法在不设置断点的情况下捕获应用程序正在执行的每一行代码?

编辑:程序不是我写的,所以我不熟悉代码。 我希望逐步完成整个程序,捕获正在执行的每一行代码。 在每个事件中设置断点是不切实际的,因为动态创建了各种控件。

要调试按钮单击而不设置断点:

  1. 使用调试器启动应用程序。
  2. 在预期点击之前到达状态。
  3. 返回调试器并按Pause然后按F11(Step Into) – 什么都不会发生。
  4. 转到应用程序并按下按钮 – 调试器应该接管并将您放入事件处理程序。

注意:如果处理Paint,任何Mouse事件或可能的某些其他事件,这将不起作用。 每次尝试上述步骤时,调试器都会将您放入这些处理程序中。

如果您使用的是Visual Studio 2010的Ultimate版本,则可以使用名为IntelliTrace (以前的历史调试器)的新function。 这将允许您完全按照自己的意愿执行操作 – 能够查看在执行程序期间发生的所有方法调用和事件,并且您将能够跳回到您需要的事件。

要启用IntelliTrace,请转到Tools → Options → IntelliTrace ,然后选中“启用IntelliTrace”复选框,并选择以下两种模式之一:“仅事件”或“事件和调用信息”,然后使用调试器运行应用程序(F5) 。

两种模式之间的区别在于后者使用分析器来收集所有运行时信息,因此您可以获得完整的调用堆栈,但是您将无法使用调试器的编辑和继续function。

您可以在本系列文章中找到更多内容 ,当然也可以在MSDN上找到。

您还可以尝试使用代码覆盖工具。

例如,如果你有Resharper和dotCover ,你可以运行你的应用程序(通过dotCover-> Cover Application …菜单项),当应用程序完成时,dotCover将显示在VS IDE中运行的代码行以绿色突出显示它们。 未运行的代码行以红色着色。

我不知道是否有其他工具可以做到这一点,但这是一个选择。

我开发了Runtime Flow工具来解决这个问题 – 通过实时函数调用监视来理解一个大的不熟悉的.NET代码库。 它与IntelliTrace类似,但更重视控制流程而不是调试。

你为什么要打破每一条线? 这将是非常繁重和耗时的。 如果要在程序执行时查看程序的活动,请使用日志记录机制或Debug.Writeline将信息输出到立即窗口。

您无法跟踪代码行,但您可以使用Trace.TraceInformation调用来了解已执行的内容。 还有Debug.Write 。 两个输出都将在Visual Studio的输出窗口中写入。

另一种解决方案是将日志记录添加到您的应用程序中,例如使用log4net,但这可能对您的需求而言过度。

这不是您要求的,但如果您不知道可以打开或关闭现有断点。 在您的情况下,您可以在整个代码的关键位置添加断点,并在您不想调试它们时禁用它们。 这样,您可以在以后再次使用它们时重新启用它们。

通过Debug> Windows> Breakpoints菜单(CTRL + D,B)下的Breakpoints窗口可以启用/禁用。 您还可以在窗口中包含“Function”和“File”列,这可以帮助您确定您关心的事件处理程序中的哪些断点

不是真的,但您可以通过其余代码设置一个断点和单步(F10 / F11)。

不要’不要 – 你需要自己设置每个断点。

如果它有助于F9是分配断点的快捷键 – 只需在每个方法的开头设置一个断点,然后从那里使用逐步(F10)/步进(F11)。