gpt4 book ai didi

visual-studio - Visual Studio 2017 声称我正在调试我的 C++/CLI 项目的发布版本

转载 作者:行者123 更新时间:2023-12-04 17:46:46 32 4
gpt4 key购买 nike

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

You are debugging a Release build of Foo.exe. Using Just My Code with Release builds using compiler optimizations results in a degraded debugging experience (e.g. breakpoints will not be hit).

然后我可以停止调试或继续调试 session ,无论是打开还是关闭“仅我的代码”。

该项目显然是使用调试信息构建的,没有任何优化。因此,旧的 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)构建的 native 项目(.vcxproj 项目文件),并且没有优化(编译器选项 /Od)

最佳答案

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

设置/ASSEMBLYDEBUG和写一样

[assembly:Debuggable(true, true)];

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

  • isJITTrackingEnabled = true
  • isJITOptimizerDisabled = true

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

关于visual-studio - Visual Studio 2017 声称我正在调试我的 C++/CLI 项目的发布版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48118504/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com