如何在设计时调试Visual Studio 2012实例



我正在开发一个WPF MarkupExtension,在设计时遇到了错误。使用Visual Studio 2010的早期版本,可以启动Visual Studio的第二个实例;工作室;2010并附加到已运行实例的进程,设置断点并调试设计时行为。

在Visual;工作室;2012年,但我可以附加到另一个Visual;工作室;2012,但在第二个实例中没有加载符号,因此我无法像Visual一样调试设计时;工作室;2010年。

如何运行此调试器?

我尝试过的东西:

  • "devenv.exe/RootSuffix Exp"技巧未成功
  • 始终以管理员身份执行
  • 加载所有符号或默认符号
  • 使用和不使用本机代码进行调试(附加进程)
  • 使用和不使用.NET 4代码进行调试(附加进程)

在Visual Studio 2012中,WPF设计器在单独的进程中运行。试着摆弄一下这个过程。应该很容易找到进程名称。

该进程被称为XDesProc,它与每个新的预览窗口一起创建。因此:要调试预览窗口,请打开Visual的第二个实例;工作室;2012使用相同的解决方案,设置断点并连接到XDesProc。建议只打开一个预览窗口以附加到正确的流程。否则,请使用Process Explorer查找正确的流程。

确保将"启用/禁用项目代码"切换设置为"已启用"。。。在VS/BBlend 2015中,它是XAML编辑器下方的一个小图标如这里所示。

如果它被禁用,这可能是您的设计时实例似乎无法工作的原因。

此外,如果它被禁用,并且您试图使用第二个VS实例进行调试,那么当您附加到XDesProc时,您在代码隐藏中设置的任何断点都将报告它们"当前不会被命中。[因为]尚未为此文档加载任何符号"。您可能认为需要以某种方式加载符号,但如果打开Modules窗口尝试这样做,您甚至不会在列表中看到您的模块。

由于此设置被禁用,我在这个问题上损失了几个小时。希望这能帮助其他人不要这样做。正因为如此,我将在一些相关问题上发表这篇文章。

顺便说一句,James McNellis在其中一个相关问题上对这个调试过程进行了出色的描述。

最新更新