【问题标题】:How to debug Visual Studio 2012 instance design-time如何调试 Visual Studio 2012 实例设计时
【发布时间】:2016-06-23 04:22:09
【问题描述】:

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

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

如何让这个调试器运行?

我尝试过的事情:

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

【问题讨论】:

    标签: wpf visual-studio visual-studio-debugging design-time markup-extensions


    【解决方案1】:

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

    【讨论】:

    • 非常感谢!该过程称为 XDesProc,它是使用每个新的预览窗口创建的。因此:要调试预览窗口,使用相同的解决方案打开第二个 vs2012 实例,设置断点并附加到 XDesProc。建议只打开一个预览窗口以附加到正确的进程。否则使用 Process Explorer (sysinternals.com) 找到正确的进程。
    • 请详细说明“摆弄那个过程”是什么意思。
    • @SeriousM 我建议发布您的评论作为答案。
    • 看我的这篇文章...codeproject.com/Tips/1040701/…
    【解决方案2】:

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

    【讨论】:

    • 你的小费帮助了我,谢谢。但是你为什么建议打开第二个 Visual Studio 实例呢?这似乎是可选的。
    • 因为一个 Visual Studio 实例无法自行调试。 (XDesProc 与 Visual Studio 进程紧密结合)
    • 我正在构建一个 UWP,我能够附加到进程,我得到了异常,但问题是我无法在我在视图模式中设置的断点处中断,和构造函数背后的代码。我需要手动加载模块吗?
    【解决方案3】:

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

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

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

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

    顺便说一句,James McNellis on one of those related questions 对此调试过程有很好的描述。

    【讨论】:

      猜你喜欢
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多