【问题标题】:Visual Studio 2017 claims I am debugging a release build of my C++/CLI projectVisual Studio 2017 声称我正在调试我的 C++/CLI 项目的发布版本
【发布时间】:2018-01-05 17:31:10
【问题描述】:

从 Visual Studio 2013 更新到 Visual Studio 2017 后,如果我尝试启动 C++/CLI 项目(.vcxproj 项目文件)的调试会话,Visual Studio 会停止并显示一个对话框,其中显示:

您正在调试 Foo.exe 的发布版本。将 Just My Code 与使用编译器优化的 Release 构建一起使用会导致调试体验下降(例如,不会命中断点)。

然后我可以停止调试或继续调试会话,可以打开或关闭“仅我的代码”。

该项目显然是使用调试信息构建的,没有任何优化。因此,旧的 Visual Studio 2013 没有显示任何警告。

this SO questionthis SO question 都处理 Visual Studio 2015 发出的相同警告,但在阅读了那里提供的建议和提示后,我不得不说它们似乎都不是我的问题的令人信服的解决方案。具体来说,我能够通过启用 Visual Studio 选项“在模块加载时抑制 JIT 优化(仅限托管)”来消除警告,但我认为这只是治疗症状,而不是修复问题的实际原因。

我必须做些什么才能让 Visual Studio 2017 检测到我的 C++/CLI 项目是调试版本,以便它不再显示烦人的(实际上是误导性的)警告?

环境:

  • Visual Studio 2017 版本 15.5.2
  • Visual Studio 选项“仅我的代码”已启用
  • Visual Studio 选项“在模块加载时抑制 JIT 优化(仅限托管)”已禁用
  • 项目是使用 CLR 支持(编译器选项 /CLR)、调试信息(链接器选项 /DEBUG)和无优化(编译器选项 /Od)构建的本机项目(.vcxproj 项目文件)

【问题讨论】:

  • VS2017 15.5.x 是一个非常糟糕的错误包,但他们也打破了这一点有点牵强。只需确保您启用了任何 C++/CLI 代码所需的旧版调试引擎。工具 > 选项 > 调试 > 常规,必须勾选“使用托管兼容模式”。

标签: visual-studio visual-studio-2017 c++-cli


【解决方案1】:

我的问题的解决方案是需要在项目设置“可调试程序集”设置为“是”的情况下构建项目(链接器选项/ASSEMBLYDEBUG)。默认情况下,此链接器选项未设置,显然默认为/ASSEMBLYDEBUG:DISABLE。参照。微软的documentation of the linker option

设置/ASSEMBLYDEBUG和写一样

[assembly:Debuggable(true, true)];

在代码中。根据这个DebuggableAttribute构造函数的MSDN documentation,这段代码告诉调试器去设置

  • isJITTrackingEnabled = true
  • isJITOptimizerDisabled = true

因此,我在问题中提到的初始解决方法是启用 Visual Studio 选项“在模块加载时抑制 JIT 优化(仅限托管)”,并没有偏离轨道太远。但我相信,知道自己在做什么并设置一个细粒度的、特定于项目的链接器设置,总比不知道并随机更改全局 Visual Studio 设置要好。

【讨论】:

    猜你喜欢
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多