如何调试winforms设计器
我的问题不是如何在设计时调试。 我实际上想通过设计器中可用的事件进行调试。 我知道表单有加载和其他类型的事件。 在Windows窗体设计器中是否有任何事件,如init,load等?
我通过用户控件在ASP中进行了类似的调试。 它允许我们在将用户控件添加到设计器之前查看它的输出HTML。
我知道Windows窗体和ASP是不同的,但应该有一些事件在实际渲染之前检查控件的值。
我的表格需要很长时间才能在VS设计师中打开。 所以我将一个调试器附加到VisualStudio(devenv.exe),在我的Form的InitializeComponent中设置一个断点来逐步执行它以查看问题所在。 但是,断点没有被击中。
要在设计器中进行调试,您需要在设计器代码之上放置一个断点。
然后启动您的应用程序,它将在断点处停止。
按F11可以在此时移动一行。
要调试Windows窗体项目的设计时间:
- 在解决方案资源管理器中右键单击您的项目并打开属性 。
- 在属性页面中,选择“ 调试”选项卡。
- 在Start Action部分中,选择Start external program ,然后单击按钮以浏览Visual Studio可
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe"
- 保存项目,然后使用F5运行。 将开设一个新的visual studio实例。
- 使用新实例打开项目。 这使您可以调试包含项目的Visual Studio的先前实例。
- 将断点放在要在其中调试的文件中。
我什么时候才能发现这种方法有用?
- 当您在设计时遇到exception时。
- 如果要在设计时调试
Designer
或TypeConverter
或UiTypeEditor
的行为。
欲获得更多信息:
- 演练:在设计时调试自定义Windows窗体控件
通过以下堆栈溢出问题找到了一篇非常古老(近12年)的博客文章Winforms Designer如何实例化我的表单?
博客: https : //blogs.msdn.microsoft.com/rprabhu/2004/12/12/how-does-the-windows-forms-designer-in-visual-studio-load-a-form/
上面的博客引用了我的正确方向
好吧,设计师根本没有真正实例化Form1。 它正在创建Form1的基类的实例
根据上面的引用,按照以下步骤找到使设计器变慢的代码
1)创建一个扩展Form的类并将其添加到winforms项目中
public class DebuggableForm : Form { public DebuggableForm() { //Put your code in InitializeComponent method here. //Through line-by-line debugging you can find //which line is making the designer slow } }
2)扩展上面的类而不是直接扩展Form1.cs中的Form。 这里Form1是表单的名称,检查项目中的相应表单名称
public class Form1: DebuggableForm { //Your actual form code }
3)在步骤1中创建的类的构造函数中放置一个断点( DebuggableForm
)
4)将您的项目附加到另一个VS实例并在新VS中打开一个项目
5)在新打开的项目中打开form1.cs并再次执行步骤2。
6)打开设计器或双击解决方案资源管理器中的Form1。 您的DebuggableForm中的调试器将被命中
注意:上述步骤中的Form1.cs引用了Windows窗体项目中的窗体。 名称可能因项目而异
您可以使用另一个Visual Studio实例调试Visual Studio: https : //stackoverflow.com/a/7757140/343309
如果遇到设计时错误而无法恢复设计视图,则可以打开另一个visual studio并附加当前的visual studio进程进行调试。
转到工具→选项→从左窗格窗口展开调试→启用我的代码[只需选中此复选框]→确定。