如何排除和调试Visual Studio设计模式错误?

15

使用Windows 7和Visual Studio 2010,我正在编写一个C#自定义UserControl。我在代码视图模式下编码了几周,最近尝试切换到设计模式时,Visual Studio变得“未响应”。我可以等待一个小时,但仍然没有任何反应。点击关闭按钮,它会弹出“要等待、关闭、重启并发送信息给Microsoft”对话框。

有没有一种方法可以跟踪设计器正在尝试执行的代码?也许是设计时跟踪消息或断点?

3个回答

24
对于Visual Studio 2010,这个答案可以完成任务
对于Visual Studio 2012或更高版本,您需要做的实际上是调试Visual Studio Designer进程。您想要调试的进程称为XDesProc.exe。
我按照以下步骤进行操作:
  • 打开两个指向相同解决方案的Visual Studio实例
  • 在两个实例中关闭所有窗口。
  • 在任务管理器中杀死所有XDesProc.exe实例
  • 在Visual Studio实例A中,打开任何视图(不是具有异常的视图)。这将启动Visual Studio Instance A的XDesProc设计器进程
  • 在Visual Studio实例B中,附加到XDesProc.exe进程并设置断点,或者设置异常断点
  • 在Visual Studio实例A中,打开具有异常的视图
  • Visual Studio B应该会出现中断。
如果错过了某个步骤,或者需要重新开始,请从第(2)步“关闭所有窗口”杀死XDesProc实例重新开始。有时设计器会启动一次并缓存值,您需要一个干净的、非异常设计器来跟踪问题。

嘿!我正在使用VS2013,但是我没有看到XDesProc进程,也许它不同了?另外,如果我将调试器附加到devenv进程上,我的检查点就无法命中。有什么想法吗? - cgledezma
3
没事了。我只是配置错了一点。顺便说一下,在VS2013中,你实际上是要附加到devenv进程的。 - cgledezma
Visual Studio 菜单 -> 调试 -> 异常。在“公共语言运行时异常”旁边勾选“已抛出” :) - Dr. Andrew Burnett-Thompson
1
最重要的步骤是:“在 Visual Studio 实例 A 中,打开任何视图(不是那些会出现异常的视图)。这将启动 Visual Studio 实例 A 的 XDesProc 设计器进程。” 重要的一点是您必须有一个可附加的 XDesProc,除非您打开一个不会引发异常的 XAML 设计视图,否则就不会有 XDesProc。 - Simon_Weaver
您还需要确保在“附加到进程”窗口中,在“附加到”字段中选择了“托管(v4.*,v4.*)”代码类型。 此外,您需要打开调试菜单,选择异常并选中常见语言运行时异常的复选框。您可能希望取消选中此窗口中的所有其他类型的异常,以免分散注意力。更多信息(附有屏幕截图)请参见:https://blog.jayway.com/2013/12/25/visual-studio-2013-and-blend-design-time-exception-debugging/ - Artemious

16

对于Visual Studio 2010/2013

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

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

在Visual Studio实例#1中(原始实例,将被卡住):打开包含您的用户控件的设计器,VS#2中的断点将被触发。

对于Visual Studio 2012

您要调试的进程是XDesProc.exe - 参见Dr.ABT的答案。否则,程序与Visual Studio 2010/2013相同。


实际上是可以工作的!但不知何故它无法触发断点。当 VS #1 处于“未响应”状态时,我不得不前往 VS #2 > 调试 > 中断所有。 - Jake
请确保在两个Visual Studio中使用相同版本的用户控件(dlls/pdbs)。 - Blachshma
好的,我有一个问题:https://dev59.com/WXVD5IYBdhLWcg3wRpaX - Jake


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接