我们正在将Visual C++项目切换到VC141工具链(VS 2017)。我们遇到了一个问题,Visual Studio无法使用
.pdb
源文件
.obj
文件不再存在(例如,因为它们是在生成服务器上编译的)。
让我们来看一个非常简单的可执行项目:
#include <iostream>
int main() {
std::cout << "Hello world\n";
std::cin.ignore();
}
这个
.vcxproj
文件是默认的,除了
<GenerateDebugInformation>true</GenerateDebugInformation>
生成PDB文件。
复制步骤始终使用VS2017:
-
编制项目
-
在内部放置断点
main
-
拆卸中间体
Debug/
目录包含
Obj.
文件夹
-
禁用通过配置管理器运行的生成(因此不会重新创建它们)
-
启动调试会话
这对VC100(vs 2010)工具链很好,断点也可以工作,但它会立即触发VC141的以下错误:
错误:无法打开文件
<path>\debug\main.obj。错误代码=0x80070003。
这个非常通用的错误代码确实与
FACILITY_WIN32/ERROR_PATH_NOT_FOUND
. 通往
main.obj
可以在两个版本的
PDB
文件,因此我们不清楚为什么在找不到的时候,vs会突然崩溃。
“模块”视图显示
PDB
文件似乎已正确加载。此外,断点的工具提示还显示以下错误:
当前不会命中断点。处理myuser_141.exe时出现意外的符号读取器错误。
如果我们不能在实际应用程序中编译二进制文件的计算机上进行调试,那么对于这个问题,解决方案或解决方法是什么?
这是满的
.vcxproj(项目)
文件:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion>
<RootNamespace>MyUser_141</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
<ProjectGuid>{90982029-29B8-4C9B-AFB7-B8F555F15C1E}</ProjectGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="main.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
进一步研究:
-
我们尝试了其他的工具链版本。漏洞不在v14.0中(与2015年相比),但最快在14.11(vs2017 15.3)中出现。
-
使用
v141_xp
,据我们所知,它使用相同的工具链,但使用较旧的系统库,
作品
.