我正在尝试调试具有大量事件的Windows窗体应用程序:按下按钮,计时器等。
有没有办法在不设置断点的情况下捕获应用程序正在执行的每一行代码?
编辑: 该程序不是由我编写的,所以我不熟悉代码。我希望逐步完成整个程序,捕获正在执行的每一行代码。在每个事件中设置断点是不切实际的,因为动态创建了各种控件。
答案 0 :(得分:14)
用于调试按钮单击而不设置断点:
注意:如果处理Paint,任何Mouse事件或可能的某些其他事件,这将不起作用。只要您尝试上述步骤,调试器就会将您带入这些处理程序。
答案 1 :(得分:10)
如果您使用的是Visual Studio 2010的Ultimate版本,则可以使用名为IntelliTrace的新功能(以前的历史调试程序)。这将允许您完全按照自己的意愿执行操作 - 能够查看在执行程序期间发生的所有方法调用和事件,并且您将能够跳回到您需要的事件。
要启用IntelliTrace,请转到Tools → Options → IntelliTrace
,然后选中“启用IntelliTrace”复选框,并选择以下两种模式之一:“仅事件”或“事件和调用信息”,然后使用调试器运行应用程序(F5)。
两种模式之间的区别在于后者使用分析器来收集所有运行时信息,因此您将获得一个完整的调用堆栈,但是您将无法使用编辑和 - 继续使用调试器的功能。
您可以在此series of articles中找到更多内容,当然也可以在MSDN上找到。
答案 2 :(得分:9)
您还可以尝试使用代码覆盖率工具。
例如,如果您有Resharper和dotCover,则可以运行您的应用程序(通过dotCover-> Cover Application ...菜单项),当应用程序完成时,dotCover将显示通过以绿色突出显示它们在VS IDE中运行哪些代码行。未运行的代码行用红色着色。
我不知道是否有其他工具可以做到这一点,但这是一个选择。
答案 3 :(得分:2)
我开发了Runtime Flow工具来解决这个问题 - 通过实时函数调用监控来了解一个大的不熟悉的.NET代码库。它与IntelliTrace类似,但更重视控制流程而不是调试。
答案 4 :(得分:1)
你为什么要在每一行都打破?这将是非常繁重和耗时的。如果要在程序执行时查看程序的活动,请使用日志记录机制或Debug.Writeline
将信息输出到“立即”窗口。
答案 5 :(得分:1)
您无法跟踪代码行,但您可以使用Trace.TraceInformation
调用来了解已执行的内容。还有Debug.Write
。两个输出都将在Visual Studio的输出窗口中写入。
另一种解决方案是将日志记录添加到您的应用程序中,例如使用log4net,但这可能会因您的需求而过度。
答案 6 :(得分:1)
这并不是您要求的,但如果您不知道可以打开或关闭现有断点。在您的情况下,您可以在整个代码的关键位置添加断点,并在您不想调试它们时禁用它们。这样,您可以在以后再次使用它们时重新启用它们。
通过Debug>下的Breakpoints窗口可以启用/禁用。 Windows>断点菜单(CTRL + D,B)。您还可以在窗口中包含“功能”和“文件”列,这可以帮助您识别您关心的事件处理程序中的哪些断点
答案 7 :(得分:0)
不是,但您可以通过其余代码设置一个断点和单步(F10 / F11)。
答案 8 :(得分:0)
不要'不要' - 你需要自己设置每个断点。
如果有帮助F9是分配断点的快捷键 - 只需在每个方法的开头设置一个断点,然后从那里使用步骤(F10)/步进(F11)。