运行程序时,我需要在每次禁用某个按钮时查看,并在此时逐步执行代码。
如果我用条件设置断点 (例如:只有当button1.enabled = false时才会命中)它只会在特定的地方点击。
是否可以在整个程序中设置断点,以便我可以看到条件在多种形式和位置发生变化?
答案 0 :(得分:4)
您不能设置一个断点并将其应用于文件的每一行,但您可以在已设置的Enabled上设置断点,然后将其过滤到特定的过滤条件。这会给你想要的结果。 (注意,您可能需要关闭"只需我的代码",请参阅this question for more info)
使用" New Breakpoint At Function"设置断点。 as described here,但在Visual Studio 2013中,我似乎需要使用略有不同的表示法:
然后将断点设置为funtion:
System.Windows.Forms.Control.Enabled
在C#或VB.NET中:
System.Windows.Forms.Control.set_Enabled(bool)
(您似乎需要使用实际定义属性的类,在Button
类' Enabled
属性的情况下,Control
类是{{ 1}}继承自。
忽略关于它无法找到该函数的警告(它以某种方式对属性执行此操作),或取消选中Intellisense查找。
现在在Breakpoints列表中查找断点并自定义条件,使其在右键上断开
使用Button
属性(或使断点唯一的任何其他过滤器)在需要时触发:
当它中断时,它将在Control的源中中断(如果启用了Framework Source Stepping),这可能会令人困惑。使用“堆栈跟踪”窗口查找完全调用方法的位置。
设置断点的另一种方法是通过Stacktrace窗口。在任何具有您感兴趣的属性的行上设置断点。启动调试器并使其在该行上中断,现在使用" Step to Specific"进入你要打破的财产。
使用" Stack"窗口为您生成断点:
答案 1 :(得分:0)
因为在您的情况下,您希望打破Microsoft .NET框架中的函数,还有另一种方法。 Enabled Framework Source Stepping
打开Visual Studio Debugger选项并启用“Framework Source Stepping”并禁用“Just My Code”。
然后按照说明启用Microsoft Symbol Servers。现在在调试器下加载您的应用程序并等待下载符号文件。
在代码中的任何位置设置一个断点,它与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