Мы находимся в процессе переключения проектов 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:
Ошибка: невозможно открыть файл
\ 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 (VS 2015), но присутствует, как только 14.11 (VS2017 15.3).
Использование v141_xp
, что, насколько мы можем судитьиспользует тот же набор инструментов, но более старые системные библиотеки, работает .