如何解决和调试Visual Studio设计模式错误?

时间:2012-12-04 07:58:51

标签: .net winforms visual-studio-2010 user-controls design-time

使用Windows 7和Visual Studio 2010,我正在编写一个C#自定义UserControl。我在代码视图中进行了数周的编码,最近当我尝试切换到设计模式时,Visual Studio被绞死,“没有回应”。我可以等一个小时,但仍然没有任何反应。单击关闭按钮,它会显示“您是否要等待,关闭,重新启动并向Microsoft发送信息”对话框。

有没有办法(堆栈)跟踪设计师试图执行的代码?也许设计时跟踪消息或断点?

3 个答案:

答案 0 :(得分:23)

对于Visual Studio 2010,this answer does the job

对于Visual Studio 2012或更高版本,您需要做的是实际调试Visual Studio Designer进程。要调试的进程称为XDesProc.exe

Enter image description here

我执行以下操作:

  • 打开两个指向同一解决方案的Visual Studio实例
  • 关闭两个窗口中的所有窗口。
  • 终止任务管理器中的所有XDesProc.exe实例
  • 在Visual Studio实例A中,打开任何视图(不是具有异常的视图)。这将启动Visual Studio实例A的XDesProc设计器进程
  • 在Visual Studio实例B中,附加到XDesProc.exe上的进程并设置断点,或者设置Break on exceptions
  • 在Visual Studio实例A中,打开视图(具有例外)
  • Visual Studio B应该破解。

Enter image description here

如果您错过了,或者需要重新启动这些步骤,请从步骤(2)'关闭所有窗口'再次开始查杀XDesProc实例。有时设计师会启动一次并缓存值,您需要有一个干净的,非例外的设计师来追踪问题。

答案 1 :(得分:14)

对于Visual Studio 2010/2013

您可以调试Visual Studio设计器本身! 打开Visual Studio的第二个实例,使用Tools -> Attach To Process并附加到第一个Visual Studio(即devenv.exe)。

在Visual Studio实例#2 (您执行Attach To Process的那个):在usercontrol的构造函数上放置一个断点

在Visual Studio实例#1 (原始版本,将会卡住): 打开你的usercontrol所在的设计器,VS#2中的断点就会被击中。

对于Visual Studio 2012

您要调试的过程是XDesProc.exe - 请参阅Dr. ABT's answer。否则,该过程与Visual Studio 2010/2013相同。

答案 2 :(得分:2)