Создать pdb файл visual studio

Обновлено: 06.07.2024

Проекты Visual Studio имеют отдельные конфигурации выпуска и отладки для вашей программы. Visual Studio projects have separate release and debug configurations for your program. Вы создаете отладочную версию для отладки и версию выпуска для окончательного распространения выпуска. You build the debug version for debugging and the release version for the final release distribution.

В конфигурации отладки программа компилируется с полной символьной отладочной информацией и без оптимизации. In debug configuration, your program compiles with full symbolic debug information and no optimization. Оптимизация усложняет отладку, поскольку усложняется связь между исходным кодом и сгенерированными инструкциями. Optimization complicates debugging, because the relationship between source code and generated instructions is more complex.

Конфигурация выпуска программы не имеет символьной отладочной информации и полностью оптимизирована. The release configuration of your program has no symbolic debug information and is fully optimized. Для управляемого кода C++ и кода отладочная информация может быть создана в PDB-файлах в зависимости от используемых параметров компилятора . For managed code and C++ code, debug information can be generated in .pdb files, depending on the compiler options that are used. Создание PDB-файлов может оказаться полезным, если в дальнейшем потребуется Отладка окончательной версии. Creating .pdb files can be useful if you later have to debug your release version.

Дополнительные сведения о конфигурациях сборки см. в статье Общие сведения о конфигурациях сборки. For more information about build configurations, see Understand build configurations.

Изменение конфигурации сборки Change the build configuration

Чтобы изменить конфигурацию сборки, выполните одно из следующих действий. To change the build configuration, either:

  • В меню Сборка выберите Configuration Manager, а затем выберите Отладка или выпуск. From the Build menu, select Configuration Manager, then select Debug or Release.

или диспетчер конфигурации служб or

На панели инструментов выберите либо Отладка, либо Выпуск из списка Конфигурации решения. On the toolbar, choose either Debug or Release from the Solution Configurations list.

Можно выбрать создание файлов символов (. pdb) и включаемых отладочных данных. You can choose to generate symbol (.pdb) files and what debug information to include. Для большинства типов проектов компилятор создает файлы символов по умолчанию для отладочных и окончательных сборок, в то время как другие параметры по умолчанию отличаются по типу проекта и версии Visual Studio. For most project types, the compiler generates symbol files by default for debug and release builds, while other default settings differ by project type and Visual Studio version.

Отладчик загружает PDB-файл для исполняемого файла, только если он точно соответствует PDB-файлу, который был создан при сборке исполняемого файла (то есть это должен быть либо оригинальный PDB-файл, либо его копия). The debugger will load only a .pdb file for an executable file that exactly matches the .pdb file that was created when the executable was built (that is, the .pdb must be the original or a copy of the original .pdb file). Дополнительные сведения см. в статье почему Visual Studio требует, чтобы файлы символов отладчика точно совпадали с двоичными файлами, с которыми они были созданы?. For more information, see Why does Visual Studio require debugger symbol files to exactly match the binary files that they were built with?.

Каждый тип проекта может иметь другой способ установки этих параметров. Each project type may have a different way of setting these options.

Выберите проект в Обозревателе решений. In Solution Explorer, select the project.

Выберите значок Свойства (или нажмите клавиши ALT + ВВОД). Select the Properties icon (or press Alt+Enter).

В боковой области выберите Сборка (или Скомпилируйте в Visual Basic). In the side pane, choose Build (or Compile in Visual Basic).

В списке Конфигурация выберите Отладка или выпуск. In the Configuration list, choose Debug or Release.

В списке отладочной информации (или в списке создать отладочную информацию в Visual Basic) выберите полная, только PDBили Переносимая. In the Debugging information list (or the Generate debug info list in Visual Basic), choose Full, Pdb-only, or Portable.

Построить проект. Build your project.

Компилятор создает файлы символов в той же папке, что и исполняемый файл, или основной выходного файла. The compiler creates the symbol file(s) in the same folder as the executable or the main output file.

Создание файлов символов для C++ проекта Generate symbol files for a C++ project

Выберите проект в Обозревателе решений. In Solution Explorer, select the project.

Выберите значок Свойства (или нажмите клавиши ALT + ВВОД). Select the Properties icon (or press Alt+Enter).

В списке Конфигурация выберите Отладка или выпуск. In the Configuration list, choose Debug or Release.

В боковой области выберите компоновщик > Отладка, а затем выберите параметры для создания отладочной информации. In the side pane, choose Linker > Debugging, then select options for Generate Debug Info.

Подробные сведения о параметрах проекта для конфигураций отладки C++в см. в разделе Параметры C++ проекта для конфигурации отладки. For detailed information on project settings for debug configurations in C++, see Project settings for a C++ debug configuration.

Настройка параметров для создания файлов базы данных программы. Configure options for Generate Program Database Files.

В большинстве C++ проектов значением по умолчанию является $(OutDir)$(TargetName).pdb , которое создает PDB-файлы в выходной папке. In most C++ projects, the default value is $(OutDir)$(TargetName).pdb , which generates .pdb files in the output folder.

Построить проект. Build your project.

Компилятор создает файлы символов в той же папке, что и исполняемый файл, или основной выходного файла. The compiler creates the symbol file(s) in the same folder as the executable or the main output file.

В чем разница между Debug и Release в Visual Studio?

Другим ключевым отличием является то, что из-за этого значения по умолчанию для выпуска не беспокоятся о генерации обширной информации о символах отладки. Это файл .PDB, который вы, возможно, заметили, и он позволяет отладчику выяснить, какие инструкции по сборке соответствуют адресу строки кода и т.д.

"Debug" и "Release" на самом деле всего две метки для целого множества настроек, которые могут повлиять на вашу сборку и отладку.

В режиме "Отладка" у вас обычно есть следующее:

  • Файлы отладки программы Debug Database, которые позволяют вам внимательно следить за выполнением программы в источнике во время выполнения.
  • Все оптимизации отключены, что позволяет вам проверять значение переменных и трассировки на функции, которые в противном случае могли бы быть оптимизированы или встроены
  • Определение препроцессора _DEBUG, которое позволяет вам писать код, который действует по-разному в режиме отладки по сравнению с версией, например, с инструментами ASSERT, которые должны использоваться только при отладке
  • Связывание с библиотеками, которые также были скомпилированы с параметрами отладки, которые обычно не используются для фактических клиентов (по причинам размера и безопасности).

В режиме "Release" оптимизация включена (хотя есть несколько доступных опций), и определение препроцессора _DEBUG не определено. Обычно вы все равно хотите сгенерировать файлы PDB, потому что очень полезно иметь возможность "отлаживать" в режиме выпуска, когда все работает быстрее.

Если вы просмотрите параметры компиляции проекта и сравните их, вы увидите, какие отличия.

Предполагая, что вопрос касается кода native/С++ (это не совсем понятно из фразы):

В принципе, в Debug все оптимизации генерации кода отключены. Некоторые библиотеки (например, STL) по умолчанию используют более строгую проверку ошибок (например, итераторы отладки). Создается дополнительная информация об отладке (например, для "Редактирование и продолжение" ). В коде генерируются больше вещей, чтобы ловить ошибки (значения локальной переменной установлены на неинициализированный шаблон, используется отладочная куча).

В основном, отладка включает много дополнительной информации, полезной при отладке. В режиме выпуска все это вырезано и продается для повышения производительности.

Также обратите внимание, что при использовании MFC, например, проекты отладки ссылаются на нераспространяемые DLL-версии, такие как MFC90D.DLL , а релиз строит ссылку на распространяемые версии, такие как MFC90.DLL . Вероятно, это похоже на другие структуры.

Поэтому вы, вероятно, не сможете запускать приложения для создания отладки на машинах без разработки.

Также, по-видимому, режим Debug создает много дополнительных потоков, чтобы помочь в отладке. Они остаются активными на протяжении всей жизни процесса, независимо от того, прикрепляете ли вы отладчик или нет. См. Мой родственный вопрос здесь.

Очевидное различие, которое вы видите, это размер двоичного файла. Сборка Debug создает большую двоичную версию, чем сборка Release.

При компиляции в Debug таблица символов добавляется в скомпилированный объект файла кода, который позволяет программам отладки использовать эти двоичные файлы и осваивает значения объектов и переменных.

Другая наблюдаемая разница заключается в том, что в режиме Release двоичный код просто сбой при фатальной ошибке в режиме Debug, если вы начнете отладку приложения в Visual Studio, вы можете проверить стек вызовов, который сообщает вам точное местоположение ошибочное утверждение.

RELEASE

DEBUG

Интересно, что в разделе Link они имеют GenerateDebugInformation значение true.

Я не знаю, каковы точные различия, потому что на самом деле нет информации, доступной на этом.

Но основная наблюдаемая разница заключается в том, что версия выпуска иногда искажает полученный DLL файл и, таким образом, делает ваше приложение неприменимым для веб-приложения.

К сожалению, вы должны поместить сборку отладки в производство. И да, для публикации вам нужно использовать старый добрый FTP.

Обновл. 21 Фев 2019 |

Конфигурация сборки (англ. «build configuration») – это набор настроек проекта, которые определяют принцип его построения. Конфигурация сборки состоит из: имени исполняемого файла, директории исполняемого файла, в каких директориях IDE будет искать код и заголовочные файлы, информации об отладке и параметров оптимизации вашего проекта.

Интегрированная среда разработки имеет две конфигурации сборки: «Release» (Релиз) и «Debug» (Отладка).

Конфигурация «Debug» предназначена для отладки вашей программы. Эта конфигурация отключает все настройки по оптимизации, включает информацию об отладке, что делает ваши программы больше и медленнее, но упрощает проведение отладки. Режим «Debug» обычно используется в качестве конфигурации по умолчанию.

Конфигурация «Release» используется для сборки программы для её дальнейшего выпуска. Программа оптимизируется по размеру и производительности и не содержит дополнительную информацию об отладке.

Например, исполняемый файл программы «Hello, World!» из предыдущего урока, созданный в конфигурации «Debug», у меня занимал 65 KB, в то время как исполняемый файл, построенный в конфигурации «Release», занимал всего лишь 12 KB.

Переключение между режимами «Debug» и «Release» в Visual Studio

Самый простой способ изменить конфигурацию проекта – выбрать соответствующую из выпадающего списка на панели быстрого доступа:

Debug и release visual studio

Переключение между режимами «Debug» и «Release» в Code::Blocks

В Code::Blocks на панели быстрого доступа есть также выпадающий список, где вы можете выбрать соответствующий режим конфигурации:

Debug и release visual studio

Заключение

Используйте конфигурацию «Debug» при разработке программ, а конфигурацию «Release» при их выпуске (когда уже будете готовы представить программу на всеобщее обозрение).

За репост +20 к карме и моя благодарность!

Урок №5. Компиляция вашей первой программы

Комментариев: 9

Не понятно , зачем нужны два exe файла , полученные в режиме debug и relese?. Есть же файл проекта, в котором можно производить отладку программы. А как запустить exe файл debug для отладки? Этот момент не понятно описан.

Юрий! Спасибо за грамотное, доступное изложение !
Такое я и искал!

А у меня на dev C++ стоит Release мне оставить это или нет?

То есть, использовать конфигурацию Debug при разработке программ чтобы искать ошибки, а release когда уже уверен что всё в порядке и можно выпускать?

В скачанном компиляторе CodeBlocks с самого начала используется Relese(на Debug переключаться не хочет), в дальнейших уроках будут возникать ошибки?

У вас последняя версия CodeBlocks? Пробовали переустанавливать?

Ошибки не будут возникать, если вы их допускать не будете. Работать можно и в версии Release, ошибок насчет самой конфигурации Release возникать не должно.

Файлы базы данных программ (PDB) также называются файлами символов и используются для сопоставления идентификаторов и инструкций в исходном коде вашего проекта с соответствующими идентификаторами и инструкциями в скомпилированных приложениях. С помощью этих файлов отладчик связывается с исходным кодом, что позволяет выполнять его отладку.

При создании проекта из интегрированной среды разработки Visual Studio со стандартной конфигурацией отладочной сборки компилятор создает необходимые файлы символов. В этой статье описывается, как управлять файлами символов в интегрированной среде разработки, например, как указать расположение символов в параметрах отладчика, как проверить состояние загрузки символов во время отладки и как задать параметры символов в коде.

Подробные сведения о файлах символов см. в следующих статьях:

Принципы использования файлов символов

PDB-файл содержит отладочные данные и сведения о состоянии проекта, позволяющие выполнять инкрементную компоновку отладочной конфигурации приложения. Отладчик Visual Studio использует PDB-файлы для определения двух ключевых элементов информации во время отладки:

  • Имя исходного файла и номер строки, которая отображается в интегрированной среде разработки Visual Studio.
  • Расположение точки останова в приложении.

В файлах символов также указываются расположение исходных файлов и при необходимости сервер, с которого они будут извлекаться.

Отладчик загружает только те PDB-файлы, которые точно соответствуют PDB-файлам, созданным при построении приложения (то есть исходные PDB-файлы или их копии). Точное дублирование является обязательным, поскольку компоновка приложения может быть изменена даже в том случае, если сам код не изменялся.

Если требуется выполнить отладку кода за пределами исходного кода проекта, например кода Windows или стороннего кода, вызываемого проектом, необходимо указать расположение PDВ-файлов (и, если необходимо, исходных файлов) для внешнего кода, причем эти файлы должны точно соответствовать сборкам вашего приложения.

Расположение файлов символов и поведение при загрузке

При отладке проекта в интегрированной среде разработки Visual Studio отладчик автоматически загружает файлы символов, расположенные в папке проекта.

При отладке управляемого кода на удаленном устройстве все необходимые файлы символов должны находиться либо на локальном компьютере, либо в расположении, указанном в параметрах отладчика.

Отладчик также ищет файлы символов в следующих местах:

Расположение, указанное в библиотеке DLL или в исполняемом файле (EXE).

По умолчанию, если на компьютере производится сборка библиотеки DLL или исполняемого файла (EXE), компоновщик помещает полный путь и имя связанного PDB-файла в библиотеку DLL или в EXE-файл. Отладчик проверяет, присутствует ли файл символов в этом расположении.

Папка, в которой располагается сам DLL- или EXE-файл.

Любые расположения, указанные в параметрах отладчика для файлов символов. Сведения о добавлении и активации расположений символов см. в разделе Настройка расположения символов и параметров загрузки.

Любая папка локального кэша символов.

Указанные серверы и расположения символов — локальные, сетевые или в Интернете — такие как серверы символов корпорации Майкрософт, если эта возможность включена. Visual Studio может загружать отладочные файлы символов с серверов символов, которые реализуют протокол symsrv . Visual Studio Team Foundation Server и средства отладки для Windows — это два средства, которые могут использовать серверы символов.

Возможно использование следующих серверов символов:

Серверы символов во внутренней сети или на локальном компьютере Команда разработчиков или компания может создавать серверы символов для собственных продуктов и поддерживать кэш для символов из внешних источников. Можно иметь сервер символов на собственном компьютере.

Сторонние серверы символов Сторонние поставщики приложений Windows и библиотек могут предоставить доступ к серверу символов в Интернете.

При использовании сервера символов, отличного от общедоступных серверов корпорации Майкрософт, следует убедиться в том, что сервер и его путь заслуживают доверия. Поскольку файлы символов могут содержать произвольный исполняемый код, возможно возникновение угроз безопасности.

Настройка расположения символов и параметров загрузки

На странице Сервис > Параметры > Отладка > Символы можно выполнить следующие действия.

  • Указать и выбрать пути поиска и серверы символов для компонентов Майкрософт, Windows или сторонних производителей.
  • Указать модули, для которых отладчик будет или не будет автоматически загружать символы.
  • Эти параметры можно изменять во время выполнения отладки. См. раздел Управление символами при отладке.

Указание расположения символов и параметров загрузки:

В Visual Studio откройте меню Сервис > Параметры > Отладка > Символы (или Отладка > Параметры > Символы).

В разделе Места размещения файлов символов (.pdb) :

Чтобы добавить новое расположение сервера символов:

Поиск выполняется только в указанной папке. Любые вложенные папки, в которых требуется осуществлять поиск, должны быть внесены в список.

Добавление нового расположения сервера символов VSTS:

Чтобы изменить порядок загрузки для расположений символов, используйте клавиши CTRL+СТРЕЛКА ВВЕРХ и CTRL+СТРЕЛКА ВНИЗ либо значки со стрелками вверх и вниз.

Чтобы изменить URL-адрес или путь, дважды щелкните элемент или выберите его и нажмите клавишу F2.

Чтобы удалить элемент, выделите его и щелкните значок - .

Необязательно: чтобы повысить производительность загрузки символов, перейдите в раздел Кэшировать символы в этом каталоге и введите путь к локальной папке, в которую серверы символов могут копировать символы.

Не размещайте локальный кэш символов в защищенной папке, такой как C:\Windows или вложенные папки. Вместо этого следует использовать папку, для которой разрешены чтение и запись.

Если для проекта C++ задана переменная среды _NT_SYMBOL_PATH , она переопределяет значение, заданное в разделе Кэшировать символы в этом каталоге.

Укажите модули, которые отладчик должен загружать из расположений файлов символов (. pdb) при запуске.

Выберите Все модули, кроме исключенных (значение по умолчанию), чтобы загружать все символы для всех модулей, кроме тех, что были явно исключены. Чтобы исключить конкретные модули, выберите Укажите исключенные модули, щелкните значок + , введите имена исключаемых модулей и нажмите кнопку ОК.

Чтобы загружать из расположений файлов символов только заданные модули, выберите Загружать только указанные модули. Выберите Укажите включенные модули, щелкните значок + , введите имена включаемых модулей и нажмите кнопку ОК. Файлы символов для других модулей не загружаются.

Другие параметры символов для отладки

Для настройки дополнительных параметров символов перейдите в раздел Сервис > Параметры > Отладка > Общие (или Отладка > Параметры > Общие):

Загружать экспорты из DLL (только машинный код)

Загружает таблицы экспорта библиотеки DLL для C/C++. Дополнительные сведения см. в разделе Таблицы экспорта библиотеки DLL. Поскольку на чтение данных экспорта для библиотеки DLL затрачиваются определенные ресурсы, по умолчанию загрузка таблиц экспорта отключена. Кроме того, вы можете использовать dumpbin /exports в командной строке сборки C/C++.

Включить отладку на уровне адреса и Показывать дизассемблированный код, если исходный код недоступен

Дизассемблированный код отображается во всех случаях, когда исходные файлы или файлы символов не найдены.

Параметры / Отладка / Общие параметры дизассемблирования

Включить поддержку сервера системы управления версиями

Если исходный код на локальном компьютере отсутствует или PDB-файл не соответствует исходному коду, при отладке приложения используется сервер системы управления версиями. Сервер системы управления версиями принимает запросы на файлы и возвращает сами файлы из этой системы. Сервер системы управления версиями использует для работы библиотеку srcsrv.dll, которая нужна для чтения PDB-файла приложения. Этот PDB-файл содержит указатели на репозиторий исходного кода, а также команды, используемые для получения исходного кода из репозитория.

Чтобы ограничить набор команд, которые библиотека srcsrv.dll может исполнять из PDB-файла приложения, можно включить список допустимых команд в файл srcsrv.ini. Поместите файл srcsrv.ini в ту же папку, что и файлы srcsrv.dll и devenv.exe.

В PDB-файл приложения можно внедрять произвольные команды, поэтому убедитесь, что в файл srcsrv.ini включены только те из них, которые требуется выполнять. Любая попытка выполнить команду не из файла srcsvr.ini вызовет диалоговое окно подтверждения. Дополнительные сведения см. в статье Предупреждение системы безопасности. Отладчик должен выполнить команду без доверия.

Параметры команд не проверяются, поэтому будьте внимательны с доверенными командами. Например, если вы включили команду cmd.exe в файл srcsrv.ini, пользователь-злоумышленник может указать параметры, которые сделают выполнение команды cmd.exe опасным.

Выберите этот элемент и нужные дочерние элементы. Параметры Разрешить выполнение частично доверенных сборок (только управляемых) на сервере системы управления версиями и Всегда выполнять ненадежные команды исходного сервера без запроса могут повысить риски безопасности, описанные выше.

Включить параметры сервера системы управления версиями

Параметры символов для компилятора

Если при выполнении сборки проекта из интегрированной среды разработки Visual Studio используется стандартная конфигурация сборки Отладка, компилятор C++ и управляемые компиляторы создают соответствующие файлы символов для кода. Параметры компилятора также можно задать в коде.

Параметры C/C++

PDB-файл для C/C++ создается при сборке с параметрами /ZI или /Zi. В Visual C++ параметр /Fd присваивает имя PDB-файлу, который создается компилятором. При создании проекта в Visual Studio с использованием интегрированной среды разработки используется параметр /Fd с целью создания PDB-файла с именем <project>.pdb.

При сборке приложения, написанного на C/C++, с использованием файла makefile и указанием параметра /ZI или /Zi без /Fd компилятор создает два описанных ниже PDB-файла:

VC<x>.pdb, где <x> представляет версию компилятора Microsoft C++, например VC11.pdb.

Файл VC<x>.pdb хранит все отладочные данные для отдельных объектных файлов и располагается в том же каталоге, что и файл makefile проекта. Каждый раз, создавая объектный файл, компилятор C/C++ добавляет отладочную информацию в файл VC<x>.pdb. Поэтому, даже если исходный файл включает общие файлы заголовков, такие как <windows.h> , определения типов (typedef) из этих заголовков сохраняются только один раз, а не включаются в каждый объектный файл. Вставляемая информация включает информацию о типах, но не включает символьную информацию, такую как определения функций.

Файл <project>.pdb содержит все отладочные данные из EXE-файла проекта и располагается в подкаталоге \debug. Файл <project>.pdb содержит полные отладочные данные, включая прототипы функций, а не только сведения о типах, содержащиеся в файле <x>.pdb.

Файлы VC<x>.pdb и <project>.pdb поддерживают добавочные обновления. Компоновщик также включает путь к PDB-файлам в EXE-файл или DLL-файл, которые он создает.

Таблицы экспорта библиотеки DLL

В выходных данных команды dumpbin /exports можно увидеть точное имя функции, включая символы, отличные от буквенно-цифровых. Просмотр точных имен функций полезен для задания точки останова в функции, поскольку в отладчике имена функций могут быть усечены в других местах. Дополнительные сведения см. в разделе dumpbin /exports.

Веб-приложения

Управление символами при отладке

Для загрузки символов или изменения параметров символов во время отладки можно использовать окна Модули, Стек вызовов, Локальные, Видимые или Контрольные значения. Дополнительные сведения см. в разделе Дополнительные сведения о присоединении отладчика к приложению.

Работа с символами в окне "Модули"

В процессе отладки в окне Модули можно узнать, какие модули будут рассматриваться отладчиком в качестве пользовательского кода (или "моего кода"), а также проверить состояние загрузки символов для них. Кроме того, в окне Модули вы можете отслеживать состояние загрузки символов, загружать символы и изменять параметры символов.

Отслеживание или изменение расположений и параметров символов во время отладки:

  1. Чтобы открыть окно Модули во время отладки, выберите Отладка > Окна > Модули (или нажмите клавиши CTRL + ALT + U).
  2. В окне Модули щелкните правой кнопкой мыши заголовки Состояние символов или Файл символов либо любой модуль.
  3. В контекстном меню выберите один из следующих вариантов:

Использование страниц "Символы не загружены" или "Нет исходного кода"

Отладчик может прервать выполнение в коде, для которого отсутствуют файлы символов или исходные файлы, в результате любого из следующих событий:

  • Шаг с заходом в код.
  • Приостановка выполнения кода из-за точки останова или исключения.
  • Переключение на другой поток.
  • Изменение кадра стека двойным щелчком по кадру в окне Стек вызовов.

Когда происходит любое из этих событий, отладчик отображает страницу Символы не загружены или Нет исходного кода, чтобы помочь найти и загрузить необходимые символы или исходный код.

Использование страницы "Символы не загружены" для поиска и загрузки отсутствующих символов:

Если отладчик находит PDB-файл после выполнения одного из этих действий и может извлечь исходный файл на основании информации в PDB-файле, отображается исходный код. В противном случае отображается страница Нет исходного кода, на которой описывается проблема и приводятся ссылки на действия, которые могут решить ее.

Добавление путей поиска исходных файлов в решение:

Вы можете указать расположения, в которых отладчик будет искать исходные файлы, а также исключить из поиска определенные файлы.

Выберите решение в обозревателе решений и затем щелкните значок Свойства, нажмите клавиши ALT+ВВОД либо щелкните это решение правой кнопкой мыши и выберите пункт Свойства.

Выберите Исходные файлы отладки.

В разделе Каталоги, содержащие исходный код введите или выберите расположения исходного кода для поиска. Щелкните значок Новая строка для добавления дополнительных расположений, значки со стрелками вверх и вниз для изменения их порядка либо значок X для их удаления.

Отладчик выполняет поиск только в указанном каталоге. Любые подкаталоги, в которых требуется осуществлять поиск, должны быть внесены в список.

В разделе Не выполнять поиск следующих исходных файлов введите имена исходных файлов, исключаемых из поиска.

Проекты Visual Studio имеют отдельные конфигурации выпуска и отладки для вашей программы. Производится построение отладочной версии для отладки и версии выпуска для окончательного выпуска программы.

Отладочная конфигурация программы компилируется с полной символической отладочной информацией и без оптимизации. Оптимизация усложняет отладку, поскольку усложняется связь между исходным кодом и сгенерированными инструкциями.

Конфигурация выпуска для программы полностью оптимизируется и не содержит символической отладочной информации. Для управляемого кода и кода C++ отладочная информация может быть создана в виде PDB-файлов в зависимости от используемых параметров компилятора. Создание PDB-файлов может оказаться полезным, если позднее возникнет необходимость в отладке версии выпуска.

Дополнительные сведения о конфигурациях сборки см. в статье Общие сведения о конфигурациях сборки.

Изменение конфигурации сборки

Для изменения конфигурации сборки сделайте следующее.

На панели инструментов выберите либо Отладка, либо Выпуск из списка Конфигурации решения.

конфигурация сборки панелей инструментов

Можно выбрать создание файлов символов (PDB) и отладочные данные, которые необходимо включить. Для большинства типов проектов компилятор создает файлы символов по умолчанию для отладочных и окончательных сборок, в то время как другие параметры по умолчанию отличаются по типу проекта и версии Visual Studio.

Отладчик загружает PDB-файл для исполняемого файла, только если он точно соответствует PDB-файлу, который был создан при сборке исполняемого файла (то есть это должен быть либо оригинальный PDB-файл, либо его копия). Дополнительные сведения см. в статье Почему Visual Studio требует, чтобы файлы символов отладчика точно соответствовали двоичным файлам, с которыми они были собраны?

Каждый тип проекта может иметь свой способ установки этих параметров.

Выберите проект в Обозревателе решений.

Выберите значок Свойства (или нажмите клавишу ALT+ВВОД).

В боковой области выберите Сборка (или Компилировать в Visual Basic).

В списке Конфигурация выберите Отладка или Выпуск.

В списке Сведения об отладке (или Создать сведения об отладке в Visual Basic) выберите Полные, Только для PDB или Переносимые.

Компилятор создает файлы символов в той же папке, что и исполняемый файл или основной выходной файл.

Создание файлов символов для проекта C++

Выберите проект в Обозревателе решений.

Выберите значок Свойства (или нажмите клавишу ALT+ВВОД).

В списке Конфигурация выберите Отладка или Выпуск.

В боковой области выберите Компоновщик > Отладка, а затем выберите параметры в разделе Создать сведения об отладке.

Дополнительные сведения о параметрах проекта для конфигурации отладки C++ см. в разделе Параметры проекта для конфигурации отладки C++.

Настройте параметры для раздела Создание файлов базы данных программы.

В большинстве проектов C++ значением по умолчанию является $(OutDir)$(TargetName).pdb , которое создает PDB-файлы в выходной папке.

Создание файлов PDB для сборок в C++

Компилятор создает файлы символов в той же папке, что и исполняемый файл или основной выходной файл.

Вам когда-нибудь нужно было отлаживать или профилировать исполняемый файл (файл .exe), для которого у вас нет исходного кода или вы не можете его собрать? Тогда наименее известный тип проекта Visual Studio, проект EXE, для вас!

В Visual Studio вы можете открыть любой EXE-файл как «проект». Просто перейдите в Файл -> Открыть -> Проект/Решение и перейдите к файлу .exe . Как если бы это был файл .sln . Visual Studio откроет этот EXE-файл как проект. Эта функция существует уже давно. Она работает на всех поддерживаемых в настоящее время версиях Visual Studio, и документация по ней находится на странице Отладка приложения, которое не является частью решения Visual Studio.

Отладка

Как и в обычном проекте, вы можете начать отладку с помощью F5, которая запустит EXE и подключит отладчик. Если вы хотите отладить запуск, вы можете запустить с помощью F11, который запустит EXE и остановится на первой строке пользовательского кода. Оба эти параметра доступны в контекстном меню для проекта EXE в окне Solution Explorer, как показано ниже:


Для отладки понадобятся символы, файлы PDB, для EXE и любых DLL, которые нужно отладить. Visual Studio будет следовать тому же процессу и попытается получить символы также, как и при отладке обычного проекта. Поскольку маловероятно, что файлы PDB были распространены вместе с EXE-файлом, возможно, вы захотите найти их в сборке или, что еще лучше, на сервере символов. Дополнительную информацию и рекомендации по использованию символов можно найти в этом блоге.

Для эффективной отладки вам также понадобится исходный код, который использовался для сборки EXE, или даже для нескольких файлов, которые вас интересуют. Вам нужно найти эти файлы и открыть их в Visual Studio. Если исходный код не совпадает с исходным кодом, который был собран, EXE Visual Studio предупредит вас, когда вы попытаетесь вставить точку останова, и точка останова не будет привязана. Это поведение может быть изменено в окне Settings peek window. В окне просмотра параметров щелкните текст ссылки Must match source, а затем установите флажок, чтобы разрешить несоответствующий источник, как показано ниже. Конечно, с несоответствующим источником вы никогда не знаете, что произойдет, так что используйте это только на свой страх и риск.

Если EXE был собран с SourceLink, то информация об источнике будет включена в PDB, и Visual Studio попытается загрузить источник автоматически. Это действительно хорошая причина использовать SourceLink с вашими проектами. Даже если у вас есть локальный набор, у вас может не быть той версии, которая использовалась для сборки двоичного файла. SourceLink — ваш надежный способ убедиться, что правильный источник связан с правильным двоичным файлом.

Если вы не можете получить исходный код, у вас еще есть несколько вариантов:

Проблема заключалась в том, что под страницами свойств для проектов, под Configuration Properties -> C/C++ -> Output Files , мы установили Program Database File Name в $(OutDir)$(TargetName).pdb , так же значение, которое мы установили Configuration Properties -> Linker -> Debugging -> Generate Program Database File ,

Насколько я понимаю, первое свойство устанавливает местоположение файла pdb, который содержит символы для объектных файлов, созданных во время компиляции исходного кода, а второе задает местоположение файла pdb, который содержит символы для сгенерированной DLL. Это верно?

Согласно этому предположению, чтобы предотвратить их конфликт (я предполагаю, что это нежелательно), я устанавливаю первое свойство в $(IntDir)$(TargetName).pdb , но это сломало получившийся файл pdb (то есть отладчик не распознает его как файл pdb DLL, и сотрудник запустил на нем инструмент, а подпись не совпадает с сигнатурой, содержащейся в двоичном файле).

Обратите внимание, что Configuration Properties -> C/C++ -> General -> Debug Information Format установлен в Program Database (/Zi)

Решение

Я бы сказал, что вы правильно поняли: компилятор создает объектные файлы. В то время DLL еще не готова, поэтому, что бы ни содержал этот файл PDB, это не поможет при отладке.

После того, как компоновщик обработал выходные данные компилятора, DLL существует. В то время, PDB имеет смысл для отладки. Таким образом, соответствующий файл для целей отладки находится в Linker -> Debugging -> Generate Program Database File ,

Как упомянул @HansPassant в комментариях, настройки компилятора не следует трогать. Жаль, что это уже случилось. В консольном приложении Visual Studio 2013 или 2015 C ++ значение по умолчанию для C/C++ -> Output Files является $(IntDir)vc$(PlatformToolsetVersion).pdb итоговое название Debug\vc120.pdb или же Debug\vc140.pdb ,

ИМХО, изменение выходного файла компилятора не должно иметь значения, если имя не конфликтует с настройкой компоновщика. Это именно то, что случилось с вами: имя компилятора $(IntDir)$(TargetName).pdb (относительный путь) разрешается в тот же файл, что и имя компоновщика $(OutDir)$(TargetName).pdb (абсолютный путь). В этом случае может случиться так, что компоновщик не сможет записать в файл, потому что он все еще используется компилятором или другими странными вещами.

Читайте также: