首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在VS2010中的每个方法中设置断点

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

Stack Overflow用户
提问于 2013-02-07 20:19:33
回答 5查看 15.9K关注 0票数 19

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

因为我有很多方法,所以我不想在每个方法中都手动设置断点。

有没有什么命令或工具可以在我的VS2010解决方案中到处设置断点?

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

edit2:有一些答案,但似乎没有一个是直接而简单的解决方案。还要别的吗?

EN

回答 5

Stack Overflow用户

发布于 2013-02-10 03:42:49

This answer建议使用一个可以按您的要求执行的宏,但我个人的建议是使用分析器-它允许您在运行时暂停和恢复分析(几乎所有的商业分析器都是这样做的),然后在单击按钮之前单击“开始分析”按钮。在探查器中查看调用树通常是了解应用程序正在做什么的一种非常方便的方法,这比在调试器中单步执行要多得多。

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

票数 4
EN

Stack Overflow用户

发布于 2016-02-25 23:12:01

这里有一个简单的文本替换的快速而肮脏的方法:

  1. 格式化您的C#文件,以便所有缩进都对齐。你可以在"^ {".
  2. Set > Advanced > Format Document
  3. Open up text replace with Ctrl+H
  4. Set "Text to Find“字段"^ {".
  5. Set "Replace”字段to this " {System.Diagnostics.Debugger.Break();"
  6. Click窗口中的"Use Regular Expression“按钮点击"Replace
  7. ”或点击Alt+A
  8. If你的文件中有嵌套的枚举、类或结构的类,你会有一些编译器错误。从它们中移除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布尔值的地方插入一个手动断点。

要从你的代码中删除所有这些,要么做另一个文本替换,要么编辑撤销所有内容。

票数 1
EN

Stack Overflow用户

发布于 2013-02-08 17:06:53

我认为您可以使用如下工具为它创建一个“方面”:postsharp

面向方面的编程允许您将代码添加到每个方法的开头或结尾(通过后处理步骤)。所以添加这行代码很简单:

 System.Diagnostics.Debugger.Break()

添加到每个方法中(实际上不需要编辑所有的源代码)。更典型的是,它用于将日志语句添加到每个方法的开头:“end DrawLine(x=30,y=80,z=12)”和方法的结尾:“log DrawLine(x,y,z)”。这使得跟随你的程序流程变得容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14750967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档