15

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

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

4

3 回答 3

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 实例。有时设计器启动一次并缓存值,您需要有一个干净、无异常的设计器来跟踪问题。

于 2014-03-24T11:32:46.150 回答
16

对于 Visual Studio 2010/2013

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

在 Visual Studio 实例 #2 (您在其中执行附加到进程的实例)中:在用户控件的构造函数上放置一个断点

在 Visual Studio 实例#1 中(原来的实例会卡住):打开你的用户控件所在的设计器,VS#2 中的断点将被命中。

对于 Visual Studio 2012

您要调试的过程是XDesProc.exe- 请参阅ABT 博士的回答。否则,该过程与 Visual Studio 2010/2013 相同。

于 2012-12-04T08:03:37.347 回答
2

答案在演练:在设计时调试自定义 Windows 窗体控件(MSDN)。

于 2013-08-02T13:40:42.923 回答