14

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

但是,在 Visual Studio 2012 中,我也可以附加到另一个 Visual Studio 2012 的进程,但是在第二个实例中没有加载任何符号,因此我无法像使用 Visual Studio 2010 那样调试设计时间。

如何让这个调试器运行?

我尝试过的事情:

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

3 回答 3

14

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

于 2012-10-11T15:37:51.900 回答
8

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

于 2015-02-27T09:50:56.530 回答
3

确保您将“启用/禁用项目代码”切换设置为“启用”...在 VS/Blend 2015 中,它是 XAML 编辑器下方的一个小图标, 如此处所示

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

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

由于此设置被禁用,我在这个问题上浪费了几个小时。希望这可以帮助其他人不这样做。因此,我将在一些相关问题上发布此内容。

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

于 2016-06-22T20:22:09.643 回答