【发布时间】:2019-05-14 12:32:27
【问题描述】:
我正在尝试调试我在 Visual Studio 2017 Professional 中获取源代码的 C++ 程序。我可以在“Release x64”配置中构建应用程序并且它执行得很好。
即使我在 Release 模式下执行它,它也会注意断点。但是在逐步执行期间,尽管条件评估为false,但指标会进入if 分支的一行,然后继续按预期在分支后面运行(具有讽刺意味的是,指标假设将执行的行是exit 语句,所以它肯定不被执行)。我猜一些自动缩进导致调试符号与源不同步。这就是为什么我想在实际的“调试”配置中刷新符号或执行代码。
但是,当我将启动配置切换为“Debug x64”并尝试运行项目时,它给了我一个“Bad Image”错误:
C:\WINDOWS\SYSTEM32\MSVCP140D.dll 不是为在 Windows 上运行而设计的,或者它包含错误。尝试使用原始安装介质重新安装程序,或联系您的系统管理员或软件供应商寻求支持。错误状态0xc000012f。
据我所知,“MSVCP140D”代表 dll 的“Microsoft Visual C++ v140 Debug”版本。 dll 并没有丢失,事实上我在我的机器上的 6 个位置都有它:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC\14.16.27012\debug_nonredist\x64\Microsoft.VC141.DebugCRT\msvcp140d.dll
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC\14.16.27012\debug_nonredist\x86\Microsoft.VC141.DebugCRT\msvcp140d.dll
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC\14.16.27012\onecore\debug_nonredist\x64\Microsoft.VC141.DebugCRT\msvcp140d.dll
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC\14.16.27012\onecore\debug_nonredist\x86\Microsoft.VC141.DebugCRT\msvcp140d.dll
C:\Windows\System32\msvcp140d.dll
C:\Windows\SysWOW64\msvcp140d.dll
据说“使用 C++ 进行桌面开发”工作负载完全由 VS Installer 安装(它声称自己是最新的版本 1.18.1100.314)。我通常用 C# 编程,所以我不熟悉项目设置交互的方式,我注意到了几件事,但我不确定它们是否与我的问题有关:
- 平台工具集为“Visual Studio 2017 (v141)”。
- 唯一包含与上述 4 个“redist”路径之一类似的路径的宏是
$(DebugCppRuntimeFilesPath)宏,它不属于“VC++ 目录”设置中的任何条目。 -
$(DebugCppRuntimeFilesPath)宏的计算结果为“C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Redist\MSVC\14.16.27023\debug_nonredist\x64” ,当 dll 在“...\14.16.27012\...”中时。目录“14.16.27023”不存在。
第 3 点对我来说似乎是最有希望的提示,但我不知道更高版本号的来源、在项目或安装中更改或影响它的位置等。
更新:我现在也尝试下载 VS 2019 安装程序(版本 2.0.3297.403),看看它是否提供了对 VC++ 工作负载的任何更新,但显然它没有。
【问题讨论】:
-
0xC000012F 非常讨厌,告诉您 c:\window\system32\msvcp140.dll 已损坏,操作系统无法再将其识别为可执行文件。您最好检查一下您的磁盘是否损坏,至少运行 chkdsk.exe。您有一个备份副本。
-
@HansPassant chkdsk 在整个 C: 卷中没有发现错误。此外,我的问题与调试版本(140d)有关,但我想这只是你的错字。
-
@HansPassant 我能够通过将
System32中的文件替换为随VS 分发的文件来解决此问题。我不确定VS应该首先使用System32中的那个而不是它自己的,但这仍然解决了这个问题。你想回答我可以接受,还是应该?
标签: visual-c++ visual-studio-2017 visual-studio-debugging