【问题标题】:Can I set a breakpoint condition over entire form?我可以在整个表单上设置断点条件吗?
【发布时间】:2014-12-15 15:41:59
【问题描述】:

在运行程序时,我需要查看每次某个按钮被禁用时的情况,并在那时单步执行代码。

如果我用条件设置断点 (例如:仅在 button1.enabled=false 时才点击)它只会在该特定位置点击。

是否可以在整个程序上设置断点,以便我可以看到条件何时在多个表单和位置发生变化?

【问题讨论】:

  • 不确定全局方法,但您可以右键单击代码中的 Button1 并选择“查找所有引用”。然后您可以使用该列表找到您感兴趣的所有代码行并相应地设置断点。

标签: vb.net debugging breakpoints


【解决方案1】:

您不能设置一个断点并将其应用于文件的每一行,但您可以在 Enabled 的设置器上设置一个断点,然后将其过滤到特定的过滤条件。这会给你想要的结果。 (注意,您可能需要关闭“仅我的代码”,请参阅this question for more info

使用“New Breakpoint At Function”as described here 设置断点,尽管在 Visual Studio 2013 中,我似乎需要使用稍微不同的表示法:

然后将断点设置为函数:

 System.Windows.Forms.Control.Enabled

在 C# 或 VB.NET 中:

 System.Windows.Forms.Control.set_Enabled(bool)

(您似乎需要使用实际定义属性的类,如果是Button 类的Enabled 属性,则是ControlButton 继承自。

忽略有关它无法找到函数的警告(它以某种方式对属性执行此操作),或取消选中 Intellisense 查找。

现在在 Breakpoints 列表中查找断点并自定义条件,使其在右键中断

使用Name 属性(或任何其他使断点唯一的过滤器)在您需要时触发:

当它中断时,它会中断控制源(如果您启用了 Framework Source Stepping),这可能会造成混淆。使用 Stack Trace 窗口查找调用该方法的确切位置。

另一种设置断点的方法是通过 Stacktrace 窗口。在具有您感兴趣的属性的任何行上设置断点。启动调试器并让它在该行中断,现在使用“Step into Specific”进入您要中断的属性。

使用“堆栈”窗口为您生成断点:

【讨论】:

  • 非常好,但不知道在断点条件中放什么,到目前为止我有什么时候:“this.btnReish.Enabled=false”在条件中,但没有命中
  • 根据他的例子,你需要this.Name == "btnReish"
  • 确保在 Visual Studio 的调试器设置中禁用“仅我的代码”并重新启动调试会话:stackoverflow.com/a/2192740/736079 您可能需要将位置调整为 System.Windows.Forms.set_Enabled(bool),具体取决于您的 Visual Studio 版本.
  • 我启动了一个 VB.NET 项目进行测试,不得不使用:System.Windows.Forms.Control.set_Enabled(bool) 作为位置,this.Name=="Button1" 作为条件。
  • 你的断点是否显示一个带有白色十字的红色圆圈?还是带有红十字的白色圆圈?前者应该意味着它现在可以工作,后者意味着由于某种原因断点出现错误。
【解决方案2】:

因为在您的情况下,您希望打破 Microsoft .NET 框架中的功能,所以还有另一种方法。 Enabled Framework Source Stepping.

打开 Visual Studio 调试器选项并启用“Framework Source Stepping”并禁用“Just My Code”。

然后按照说明启用 Microsoft 符号服务器。现在在调试器下加载您的应用程序并等待下载符号文件。

在代码中任何与 System.Windows.Forms 相关的断点(例如 MainForm 的构造函数)并右键单击“System.Windows.Forms”程序集中的任何函数以加载符号部件。这将允许您进入“启用”属性并在那里设置断点。

可以在此处找到完整的教程: http://blogs.msdn.com/b/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 2011-03-08
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多