2013-07-11 2 views
0

При создании «Debug» Build в Visual Studio он выводит файл pdb, чтобы получить подробную информацию при возникновении исключения.Когда действительно загружаются файлы pdb

Действительно ли информация в файлах pdb загружается при запуске исполняемого файла или позже в момент возникновения исключения?

+0

Многие люди создают файлы .pdb для выпуска. – MSalters

ответ

0

Да, они загружаются за пределы VS. Если ваш код падает при загрузке с PDB, вы увидите местоположение исходного кода и номера строк.

+0

нормально, но загружаются ли они в момент сбоя или при запуске приложения? – clamp

+0

@clamp: даже исполняемый файл не загружается при запуске приложения (!). Это делается путем подкачки в коде, поскольку ошибки страницы происходят. В результате неиспользуемый код вообще не выгружается. – MSalters

1

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

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

The MSDN page on PDB files Подчеркивание это:

Visual Studio отладчик использует файл project.PDB созданный линкер непосредственно и встраивает абсолютный путь к PDB в EXE или DLL файла. Если отладчик не может найти файл PDB в этом месте или , если путь недействителен (например, если проект был перенесен на другой компьютер), отладчик ищет путь, содержащий EXE, Путь символов, указанный в решении Страницы свойств (общая папка «Свойства» , страница «Файлы отладки символов»). Отладчик не будет загрузить PDB, который не соответствует отладке двоичного файла.

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

+0

ok спасибо, но загружаются они в то время, когда возникает исключение или во время запуска приложения? – clamp

+0

Они загружаются во время отладки вашего приложения; когда отладчик начинает отладку. JIT может что-то с ними сделать, если вы компилируете как **/release **, и возникает исключение, но я не уверен на этом на 100%. – aevitas

Смежные вопросы