如何在VS2010中的每个方法中设置断点
如何在VS2010中的每个方法中设置断点
我有一个较大的(C#)WPF应用程序,有n个类和m个方法。我希望在每个方法中都放置一个断点,这样每次我在应用程序中按下一个按钮或调用任何方法时,应用程序在VS2010中会触发该断点。我想了解应用程序的流程/进度。
由于我有很多方法,我不想手动在每个方法中都放置一个断点。
是否有任何命令或工具可以在我的VS2010解决方案中的每个地方都放置一个断点?
编辑:也许像以下的插件一样:http://weblogs.asp.net/uruit/archive/2011/08/04/visual-studio-2010-addin-setting-a-class-breakpoint.aspx
编辑2:有一些答案,但没有一个看起来像直接简单的解决方案。还有其他的方法吗?
在VS2010中设置每个方法的断点的原因是为了在调试代码时能够在每个方法的入口处暂停执行。下面是一种快速而简单的方法来实现这个目标:
1. 格式化C#文件,使所有的缩进都对齐。可以在 "编辑" > "高级" > "格式化文档" 中完成此操作。
2. 使用快捷键 "Ctrl+H" 打开文本替换。
3. 将 "要查找的文本" 字段设置为 "^ {"。
4. 将 "替换为" 字段设置为 " {System.Diagnostics.Debugger.Break();"。
5. 点击窗口中的小"使用正则表达式"按钮。
6. 点击"全部替换"或按下 "Alt+A"。
7. 如果文件中有嵌套的枚举、类或结构体,可能会出现一些编译错误。请删除它们中的调试调用,直到代码能够成功编译。如果嵌套的类有自己的方法,您需要使用替换字符串中更多的缩进再次运行此过程。
这个方法的原理是使用Visual Studio的文档格式化器,假设文件中的所有方法都以两个制表符和一个"{"开始。因此,任何以两个制表符和"{"开头的行都将被替换为相同的两个制表符、相同的"{",以及一个调用调试器的代码。
如果文件中有嵌套的枚举等,则会出现编译错误,因为文本替换不区分方法和枚举。例如,您会看到以下错误:
enum MyColors { System.Diagnostics.Debugger.Break(); //error here Red, Green, Blue, }
如果想要能够禁用这些断点,最好的方法是使用一个简单的布尔变量。在代码的某个地方插入以下内容:
#if DEBUG private static bool _ignoreDebug = false; #endif
(我在这里放置了`#if DEBUG`作为一个标志,表示这段代码仅用于调试。这并非必需)然后在上述的第4步中,使用以下替换字符串:
" {if(!_ignoreDebug){System.Diagnostics.Debugger.Break();}"
然后,当您触发断点并且不想再继续执行时,在监视窗口中键入以下内容并按回车:`_ignoreDebug = true`。要重新启用断点,您需要在某个具有访问`_ignoreDebug`变量的位置插入一个手动断点。
要将所有这些从代码中删除,可以再次进行文本替换,或者撤消所有的编辑操作。
问题的原因是:用户想要在Visual Studio 2010中的每个方法中设置断点,但他们不知道如何实现。
解决方法是:有几种方法可以实现在每个方法中设置断点。一种方法是使用宏,可以在Stack Overflow上找到一个示例。另一种方法是使用性能分析器,它可以让用户在应用程序运行时暂停和恢复分析,并在用户单击按钮之前点击“开始分析”按钮。此外,还可以使用一些商业性能分析器,如JetBrains dotTrace和Red Gate ANTS。需要注意的是,这些方法只适用于仪器模式,而不适用于采样模式。
此外,还有一个Visual Studio扩展程序叫做OzCode,它可以实现在每个类定义旁边添加断点的功能。用户只需点击类定义旁边的图标,然后选择相应的快捷操作即可添加断点。
以下是一种设置断点的方法:
using System.Diagnostics; // 添加断点的方法 [DebuggerStepThrough] public void MethodName() { // 方法的代码 }
以上是解决问题的方法,希望对您有帮助。
在使用VS 2010时,我遇到了一个问题:如何在每个方法中设置断点。我找到了一个文章,它展示了如何在一个类的每个方法开头设置断点。我已经在VS 2010中进行了测试。具体的过程(使用Visual C++)如下:
- 进入“调试 > 新建断点 > 函数断点”(Ctrl + B)。
- 在“函数”字段中,插入
MyClass::*
。 - 这将在“断点”窗口中显示为一个断点,但是一旦触发了
MyClass
的任何方法,你将会看到在MyClass
的每个函数开头都有一个断点,所有这些断点都是“父”断点在“断点”窗口中的“子”。
我想这个方法也适用于C#。
感谢提供的链接,但是我无法在我的C#类中复制相同的效果。没有断点。请你创建一个只有2个方法的小类,并检查一下这个方法是否也适用于C#?
经过一些搜索,我找到了这个答案。其中的一个评论说这个方法只适用于C++。对于给出错误答案,我表示道歉。