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

Jak*_*ake 14 .net user-controls design-time visual-studio-2010 winforms

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

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

Dr.*_*ABT 24

对于Visual Studio 2010,此答案可以胜任.

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

在此输入图像描述.

我做以下事情:

  • 打开两个指向同一解决方案的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应该破解.

在此输入图像描述

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

  • 没关系.我有一个小小的错误配置.在VS2013上,你实际上是附加到devenv进程BTW. (3认同)

Bla*_*hma 15

对于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- 请参阅ABT博士的答案.否则,该过程与Visual Studio 2010/2013相同.