如何在VS2010中的每个方法中设置断点

我有一个更大的(c#)WPF应用程序,包含n-classesm-methods 。 我想在每个方法中放置一个断点,所以每当我按下我的应用程序中的按钮或任何方法被调用时,我希望VS2010中的应用程序能够达到该断点。 我想了解应用程序的流程/进度。

而且由于我有很多方法,我宁愿不在每个人手动放置一个断点。

是否有任何命令或工具可以在我的VS2010解决方案的任何地方放置断点?

编辑 :可能类似于以下插件: http : //weblogs.asp.net/uruit/archive/2011/08/04/visual-studio-2010-addin-setting-a-class-breakpoint.aspx

edit2 :有一些答案,但没有一个看起来像直接简单的解决方案。 还要别的吗?

编辑:仅使用C ++进行测试

我看到这篇文章展示了如何在类的每个方法的开头设置断点。 我已经使用VS 2010对其进行了测试。基本过程(使用Visual C ++时)是:

  1. 转到Debug> New Breakpoint> Breakpoint at Function (Ctrl + B)。
  2. 在“ 函数”字段中,插入MyClass::*
  3. 这将在Breakpoints窗口中显示为单个断点,但是只要MyClass的一个方法被命中,你就会在MyClass的每个函数的开头看到一个断点,所有这些都是“children” 断点窗口中的原始断点。

我想这也适用于C#。

这个答案暗示了一个可以按照你的要求做的宏,但我个人的建议是使用一个分析器 – 一个可以让你暂时停止和恢复分析(几乎所有的商业分析师都这样做),然后点击“在点击按钮之前启动“分析”按钮。 在分析器中查看调用树通常是一种非常方便的方式,可以深入了解应用程序正在执行的操作,而不仅仅是在调试器中进行操作。

更新:此function存在于我正在使用的名为OzCode的Visual Studio扩展中。 使用OzCode,当您单击类定义旁边的图标时,您将看到QuickAction:

将断点添加到类中的每个成员

我认为你使用像postsharp这样的工具为它创建一个“方面”

面向方面编程允许您将代码添加到每个方法的开头或结尾(通过后处理步骤)。 所以添加这条线是微不足道的:

  System.Diagnostics.Debugger.Break() 

每个方法(没有实际编辑所有源代码)。 更典型的是,它用于将日志语句添加到每个方法的开头,例如:“输入方法DrawLine(x = 30,y = 80,z = 12)”并在方法结束时:“离开方法DrawLine(x, Y,Z)”。 这使得您的程序流程变得简单

使用简单的文本替换,这是一种快速而肮脏的方法:

  1. 格式化您的C#文件,以便排列所有缩进。 您可以在Edit > Advanced > Format Document执行此操作
  2. Ctrl+H打开文本替换
  3. 将“要查找的文本”字段设置为“ "^ {"
  4. 将“替换”字段设置为此" {System.Diagnostics.Debugger.Break();"
  5. 单击窗口中的“使用正则表达式”按钮
  6. 单击“全部替换”或Alt+A
  7. 如果您的文件具有嵌套枚举,类或结构的任何类,则会出现一些编译器错误。 从代码中删除Debug调用,直到代码编译完毕。 如果嵌套类有自己的方法,则必须在替换字符串中使用更多选项卡再次运行此过程。

如何工作:这使用Visual Studio文档格式化程序并假定文件中的所有方法都以两个选项卡开头,然后是“{”。 因此,任何以两个标签和“{”开头的行都会被相同的两个标签替换,相同的“{”和对调试器的调用。

如果您的文件具有嵌套枚举等,则会出现编译器错误,因为文本替换不区分方法和枚举。 例如,你会看到这个:

 enum MyColors { System.Diagnostics.Debugger.Break(); //error here Red, Green, Blue, } 

如果你想要能够禁用这些断点,我能想到的最好的方法就是简单的bool。 在代码中的某处,插入以下内容:

 #if DEBUG private static bool _ignoreDebug = false; #endif 

(我把#if DEBUG作为一个标志,这个代码只用于调试。没有必要)然后在上面的步骤#4中,使用这个替换字符串:

 " {if(!_ignoreDebug){System.Diagnostics.Debugger.Break();}" 

然后,当您点击断点并且不想再打击时,在监视窗口中键入this并按Enter _ignoreDebug = true 。 要重新打开它,你需要在某个可以访问_ignoreDebug bool的地方插入一个手动断点。


要从代码中删除所有这些,请执行另一个文本替换,或者只编辑撤消所有内容。

您可以在进入方法时使用System.Diagnostics.Debugger.Break()

这样的事情可能是你在范围内设置的bool?

 #if DEBUG if (BreakPointEveryMethod) System.Diagnostics.Debugger.Break(); #endif 

notepad++肯定会有一个快速的方法,但是我不确定通过一个简单的命令行可以快速简便地实现这一点。