Удалить windows debugging symbols что это

Microsoft Windows debugging symbols можно ли удалить?

Как установить и настроить WinDBG для анализа BSOD

Инструмент WinDBG от Майкрософт необходим для загрузки и анализа файлов .dmp, которые создаются когда возникает синий экран BSoD (сообщение о критической системной ошибке). Последняя версия WinDBG работает в Windows 10, Windows 8.x, Windows 7 и Windows Vista.

В этой статье рассмотри где скачать, как установить и настроить WinDBG.

Загрузка и установка WinDBG

1.Откройте страницу загрузки и нажмите левой клавишей мыши на «Скачать отдельный пакет SDK»;

2.Откройте скачанный файл sdksetup.exe;

3.Здесь вы можете выбрать место для установки или оставить его по умолчанию, нажмите Next;

4.Примите лицензионное соглашение, нажав на Accept;

5.Поставьте галочки в поля Debugging Tools for Windows и .Net.Framework 4.6.. …, после чего нажмите Install;

6.После завершения установки нужно нажать на Close.

Ассоциированние .dmp файлов с WinDBG

1.Откройте командную строку от имени администратора: один из способов, нажмите на меню «Пуск» правой клавишей мыши и выберите «Командная строка (администратор)».

2.Если вы во время установки WinDBG не меняли путь установки, то скопируйте одну из ниже перечисленных команд и вставьте в командную строку. Если вы изменили путь установки — измените его в команде. В 32-х разрядной системе нужно написать команду cd\Program Files\Windows Kits\10\Debuggers\x86\ и нажать Enter. В 64х-разрядной системе нужно написать команду cd\Program Files (x86)\Windows Kits\10\Debuggers\x64\ и нажать Enter. Если вы не знаете разрядность вашей системы — читайте статью 32-разрядная или 64-разрядная Windows?.

3.Теперь в командной строке нужно написать команду windbg.exe -IA и нажать Enter.

Если команду вы написали без ошибок, то в результате появится окно подтверждение (смотрите рисунок), нажмите «ОК». Окно командной строки можете закрывать.

Настроить путь к символам.

WinDBG ищет символы каждый раз , когда он читает двоичный файл в файле .dmp BSOD, и нам нужно указать где ему их искать.

1.Откройте WinDBG: зайдите в меню «Пуск» => Все приложения => Windows Kits => WinDBG (x86).

2.В открывшемся окне зайдите в File => Symbol File Path.

3. Вставьте следующую строку SRV*C:\SymCache*http://msdl.microsoft.com/download/symbols и нажмите «ОК».

Что данная строка означает: создается папка с именем C: \ SymCache и в нее загружаются новые символы с сайта MSDL.

4. Открой File => Save Workspace. Закройте WinDBG.

На сегодня всё, если у вас есть дополнения — пишите комментарии! Удачи Вам

Debugging: Развертывание сервера отладочной информации

Копая залежи документов на своем рабочем компе обнаружил инструкцию по развертыванию сервера отладочной информации, которую писал два-три года назад. Попробую представить её хабросообществу. Данная инструкция будет полезна C++ разработчикам под Windows, которые хотят использовать отладку релизных версий своего продукта (удаленно и напрямую, на своих компах и компах тестировщиков), а также делать разбор крашдампов (postmortem debugging).

1. Подготовка окружения

Для развертывания хранилища отладочных сиволов понадобится: Следует установить дистрибутив Debugging Tools For Windows (будем считать, что дистрибутив установлен в папку “C:\Program Files\Debugging Tools For Windows”), и установить все дистрибутивы отладочных символов операционных систем в какую либо папку (будем считать, что они установлены в папку “C:\TempSymbols”).

2. Организация хранилища отладочной информации

Хранилище символов будем организовывать используя сервер отладочной информации symsrv.dll компании Microsoft. Для этого создадим папку для хранилища символов, например C:\Symbols. Далее следует установить на неё права на чтение для любых пользователей компьютера. Следующим шагом станет добавление файлов отладочных символов в хранилище. Для этого используем программу “symstore.exe” из комплекта Debugging Tools For Windows. Выполним следующую команду:

symstore add /r /3 /f c:\TempSymbols\*.* /s c:\Symbols /compress

данная команда пройдет по всем вложеным папкам каталога “c:\TempSymbols” и скопирует оттуда бинарные файлы и файлы с отладочной информацией в трёхуровневое хранилище символов расположенное в папку “C:\Symbols”. Архивирует их и создаст индексные файлы для ускорения доступа и хранения информации о транзакциях доступа на изменение хранилища. Описание ключей этой команды:

  • add – добавить файлы в хранилище.
  • /r – рекурсивно обходить папку с файлами символов.
  • /3 – организовывать трёхуровневое хранилище (для ускорения доступа к файлам)
  • /f [path] – путь к файлам добавляемым в хранилище.
  • /s [path] – путь к хранилищу.
  • /compress – создавать архивированное хранилище (для сбережения дискового пространства)

Команда будет выполнятся достаточно долго и результатом её выполнения будет создание хранилища отладочной информации в папке “C:\Symbols”. После данного этапа папку “C:\TempSymbols” можно удалить.

3. Организация доступа к хранилищу отладочной информации через протокол http

На данном этапе следует настроить Internet Information Services на предоставление доступа к хранилищу. Вначале следует создать виртуальную папку:

  1. Откроем “Start->Administrative Tools->Internet Information Services (IIS) Manager”.
  2. Развернем папку”Web Sites”.
  3. В контекстном меню элемента “Default Web Site “выберем пункт “New->Virtual Directory…”
  4. В окне приветствия щелкнем “Next”.
  5. В поле “Alias” введём “ Symbols” и нажмем кнопку “Next”.
  6. В поле “Path” введём “C:\Symbols” и нажмем кнопку “Next”.
  • Уберём галочку с поля “Run scripts” и “Browse”.
  • Нажмем кнопку “Next” и “Finish”.
  • Далее следует настроить типы MIME.

    1. В контектстном меню виртуальной папку “Symbols” выберем пунт “Properties”.
    2. Выберем вкладку “HTTP Headers”.
    3. Щёлкнем кнопку “MIME Types”.
    4. Щелкнем кнопку “Next”.
    5. В поле “Extension” введём “*”.
    6. В поле “Mime type” введём “application/octet-stream”.
    7. Щелкнем кнопку “Ok” чтобы выйти из окна “MIME Types”.
    8. Щелкнем кнопку “Ok” чтобы выйти из окна “Properties”.

    4. Инсталляция прокси-фильтра для обновления символов через интернет

    Прокси-фильтр нужен для того чтобы отладчик не нешедший необходимые ему файлы отладочных символов попытался взять из из публичного хранилища Microsoft, тем самым выполнив обновление хранилища символов. Прокси фильтр предоставляемый компанией Microsoft в наборе Debugging Tools For Windows является ISAPI расширением и находится в каталоге “C:\Program Files\Debugging Tools For Windows\symproxy”. Установим прокси фильтр:

      Скопируем из каталога “C:\Program Files\Debugging Tools For Windows\symproxy” файлы “symproxy.dll “и “symsrv.dll“ в папку “%WINDIR%\system32\inetsrv”.

  • Создадим пустой файл “%WINDIR%\system32\inetsrv\symget.yes”.
  • Внесём данные из файла “С:\Program Files\Debugging Tools For Windows\symproxy\symproxy.reg” в реестр.
  • Зайдем в редактор реестра и найдем ключ “HKLM/Software/Microsoft/Symbol Server Proxy/Web Directories/symbols”.
  • Изменим значение “SymbolPath” на “C:\symbols;http://msdl.microsoft.com/download/symbols”.
  • Далее зарегистрируем прокси-фильтр как источник событий создав ключ реестра “HKLM\SYSTEM\CurrentControlSet\Services\EventLog\Application\SymProxy” и добавив туда REG_EXPAND_SZ значение с именем “EventMessageFilter” и значением “%WINDIR%\system32\inetsrv\symproxy.dll”.
  • Настроим IIS на работу с прокси-фильтром:

    1. Откроем “Start->Administrative Tools->Internet Information Services (IIS) Manager”.
    2. В контекстном меню элемента “Application Pools выберем New->Application Pool”.
    3. В поле “Application ID” введём “SymSrv Pool”. И нажмем Ok.
  • В контекстном меню элемента “SymSrv Pool” выберем пункт “Properties”.
  • Выберем вкладку “Identity”, выберем радио-кнопку “Predefined” и в комбо-боксе выберем пункт “Network Service” и нажмем Ok.
  • Развернем ветку “Web Sites->Default Web Site”.
  • В контекстном меню элемента “Symbols” выберем пункт “Properties”.
  • На вкладке “Virtual Directory” нажмем кнопку “Create”.
  • В комбо-боксе “Application Pool” выберем “SymSrv Pool” и нажмем Ok.
  • В контекстном меню “Default Web Site” выберем пункт “Properties”.
  • Выберем вкладку “ISAPI Filters” и нажмем кнопку “Add”.
  • В поле “Filter Name” напишем “SymProxy”, в поле “Executable” введем “%WINDIR%\system32\inetsrv\symproxy.dll”.
  • Нажмем “Ok” чтобы закрыть окно “Filter Properties”.
  • Нажмем “Ok” чтобы закрыть окно “Default Web Site Properties”.
  • Запустим файл “iisreset.exe” чтобы рестартовать IIS с новыми настройками.

    5. Настройка параметров прокси сервера для symproxy.dll

    В Debugging Tools For Windows есть недочет, связанный с тем, что “symproxy.dll” не перенаправляет вызовы на получение сжатых файлов отладочных символов на сайт Microsoft если “symproxy.dll” работает с интернетом напрямую (без прокси сервера). Для того чтобы устранить данный дефект необходимо поставить локальный прокси сервер и с помощью утилиты “proxycfg.exe” настроить систему на работу с прокси сервером.

    6. Настройка клиентских компьютеров на работу с сервером отладочной информации

    На каждом клиентском компьютере (компьютере разработчика) следует создать папку для кеширования символов, например “C:\LocalSymbols”. Установить дистрибутив Debugging Tools For Windows и создать переменные окружения:

    • [local_repository] – это локальный кеш символов, например “C:\Symbols”.
    • [symbol_server_ip] – IP адрес или доменное имя корпоративного сервера отладочной информации.

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

    Резюме

    Итак, опишу полученый результат. У нас теперь есть сервер, на котором находятся отладочные символы операционных систем и некоторых библиотек и продуктов Microsoft. При этом если идет к серверу обращение на получение символов какой-то новой версии софта, то этот запрос будет переадресован на сайт Microsoft, символы будут скачаны оттуда и лягут на ваш сервер.

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

      настройку создания файлов отладочной информации (*.

    pdb)

  • вызов «symstore» для того чтобы отладочная информация о ваших компонентах и сами компоненты попали на ваш сервер.
  • Заключение

    Данная инструкция, как я и говорил, была написана 2-3 года назад, поэтому там фигурирует компьютер с Win2003, думаю вам не составит труда по аналогии развернуть сервер символов на Win2008 и последней версии IIS. Да и виртуалки, на которой можно было бы снять скриншоты настроки, тоже не оказалось. Но описание достаточно детальное, поэтому думаю что вы разберетесь.

    Возможно проблема описанная в пункте 5 уже не актуальна, я не проверял.

    Более детальную информацию по работе с серверами отладочной информации можно почерпнуть их хелп файла Debugging Tools For Windows, для затравки скажу что ещё можно привязать ваш сервер отладочной информации с сервером хранения исходников, и тогда при разборе крашдампа вы сможете видеть не только стек падения программы, но и место в исходниках, валидных на момент сборки.

    Отладочные символы

    Что же послужило отправной точкой к написанию этого, надо заметить, достаточно узконаправленного материала? В основном желание разобраться в пока еще не до конца мною понятом процессе отладки кода, к изучению особенностей которого я в своё время приступил. Весь круг вопросов по этой теме пока еще даже в полной мере не сформировался, просто на определенном этапе стало очевидно, что не до конца осознана роль отладочных символов. До момента углубленного изучения данной темы, у меня сложилось довольно сумбурное мнение на предмет того, что основное предназначение отладочных символов — это процесс отладки, иными словами поиск проблем в программном обеспечении. Со временем, благодаря пусть даже поверхностной работе с отладочными средствами, удалось понять, что существует некая, достаточно важная составляющая отладки, именуемая отладочными символами или символами отладки, без которой вывод того же стека вызовов может превратиться в набор малопонятных адресов памяти. Чтобы подробнее разобраться в данном вопросе, давайте сделаем экскурс в прошлое. Дело в том, что когда то процесс исследования кода и вовсе не подразумевал использование каких бы то ни было сторонних файлов, облегчающих восприятие получаемого исходного кода. Исследователь видел перед собой всего-лишь «голые» адреса памяти, используемые вызовами, переменными, смещениями различных операций.

    При изучении абсолютного большинства [стороннего] программного обеспечения, написанного для операционной системы Windows, никакой вспомогательной информацией, кроме самого исследуемого бинарного исполняемого файла, специалист не располагает. Конечно же, это создает определенные, надо отметить — порой довольно ощутимые, неудобства. Но это типичная, я бы даже сказал нормальная ситуация для стороннего программного обеспечения, автором которого являются независимые разработчики, ведь нигде не регламентировано предоставление конечному пользователю дополнительной информации помимо бинарных файлов пакета. Совсем другое дело, когда вопрос касается кода самой операционной системы Windows, где процесс исследования может помочь обнаружить ошибки в коде критичных системных модулей, или, хотя бы, получить ответ на вопрос, почему возникла та или иная ошибка. Ведь, как все мы знаем, исходный код Windows сокрыт от посторонних глаз, и по аналогии с миром Linux Вы не сможете так вот запросто получить листинг того или иного системного модуля. В свете всего этого, вопрос о предоставлении какой бы то ни было дополнительной отладочной информации, позволяющей облегчить изучение кода, является неким консенсусом между закрытостью, желанием сделать код более стабильным и пойти навстречу своим пользователям.

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

    или, иными словами:

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

    • Имена и адреса точек входа для функций;
    • Местоположение и имена локальных переменных;
    • Адреса и имена глобальных переменных;
    • Информация по типам для переменных, структур и прч.;
    • Объявление классов;
    • Информация о нумерации строк в исходном файле и файле символов. На основании этого машинные коды могут быть сопоставлены с исходным текстом, в случае его наличия.
    • соответствие между именами функций и соответствующими им адресами памяти

    При наличии этой информации отладчик по адресу памяти легко находит соответствующую функцию по ближайшему предыдущему адресу. Да и исследователю эта информация позволяет видеть «символические» данные об исследуемом двоичном файле, что в свою очередь в значительной мере упрощает исследование алгоритма приложения в процессе статического дизассемблирования либо интерактивной отладки. Исследователю кода гораздо удобнее просматривать значения переменных, а не безликих ячеек памяти. Отладочные символы часто используются в процессе поиска ошибок в исходном коде, отладке программы и разного рода отказах. По методу размещения отладочная информация может:

    • быть представлена блоком данных, встроенным в бинарный исполняемый файл, то есть находиться внутри исполняемого файла. Не лучший способ хранения отладочных символов, поскольку иногда размер исполняемого файла может существенно увеличиваться.
    • быть размещена в виде отдельного внешнего файла, находящегося либо в директории с бинарным файлом, либо в специализированной независимой директории. Подобный способ размещение символов наиболее универсален.
    • вовсе отсутствовать. То есть не создаваться на этапе компиляции и/или сборки. В большинстве случаев так и происходит 🙂

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

    Нужны ли символы

    Отладчик WinDbg корпорации Microsoft можно сконфигурировать на автоматический запрос отладочной информации, если в ней есть необходимость. Вот как раз основной вопрос, на который я хотел сам себе ответить, нужны ли эти самые отладочные символы или нет? Я провел простейший эксперимент, который состоял в том, что я нашел завалявшийся у меня на тестовой станции дамп падения в синий экран (BSOD) и подключил его сначала в WinDbg с доступными символами, а затем в том же WinDbg без символов, и вот результат:

    Честно говоря, результат меня удивил. На момент ошибки мы имеем довольно скудную информацию о сбое, такую как адрес возникновения ошибки и стек вызовов момента падения. Отладчик пытается выполнить автоматический разбор стека, и что же получается, мало того, что отладчик при отсутствии отладочных символов не может сопоставить имена и параметры функций, так он еще и не может правильно выполнить трассировку стека вызовов момента падения. Выходит, что без символов становится практически невозможно (в некоторых случаях) проследить последовательность вызовов функций, и в дополнение осложняется понимание того, какой именно модуль вызвал ошибку. Именно так! Всё только что сказанное актуально для ситуации с 32-битным кодом, поскольку:

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

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

    Распространение

    Понятное дело, что если возникло желание символы официально предоставлять, то их необходимо каким-то образом распространять, для того, что бы конечные потребители программного продукта имели возможность (при остром на то желании конечно же) этот самый продукт отлаживать, то есть в случае возникновения ошибок иметь возможность быстро находить вероятную причину возникновения. Каким же образом отладочные символы предоставляют своей целевой аудитории? До некоторых пор разработчики, перед которыми стояла задача предоставления отладочных символов своим клиентам, передавали подобную информацию для своих продуктов на оптических носителях, дисках CD/DVD. Исключением не стала и операционная система Windows, которая может поставляться с отладочными символами, традиционно размещаемыми на дополнительном диске дистрибутива, либо в составе Driver Development Kit ( DDK ). Однако, с определенного времени популярным стал метод распространения символов через сеть Интернет. В сети для этой цели Microsoft размещает собственные сервера символов, которые и предоставляют отладочные символы, однако, чтобы работать с сервером символов, необходимо использовать специализированный протокол обмена.

    Публичные и приватные (частные) символы

    Как Вы уже поняли, информация в файлах символов может отличаться по степени полноты. По умолчанию, символьные файлы, генерируемые C/C++ компоновщиком, содержат довольно много информации об исполняемом файле, обычно больше, чем большинство разработчиков программного обеспечения готовы предоставлять своим клиентам. В связи с этим, после создания удаляют информацию по приватным символам из PDB -файлов и получают на выходе то, что называют публичными символами (public symbols) или обрезанными символами (stripped symbols). Эти «обрезанные» публичные символы не могут быть использованы для отладки в режиме исходного текста, потому что исходного текста в них попросту нет, как нет и информации по номерам строк в исходном файле.

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

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

    Сервер символов Microsoft

    Многие компоненты, разрабатываемые корпорацией Microsoft, такие как файлы, входящие в состав операционных систем, офисных приложений и прочих продуктов, компилируются вместе с символами, которые затем распространяются через сервер символов Microsoft (Microsoft Symbol Server). Сервер символов представляет собой онлайновый репозиторий публичных символов для продуктов Microsoft, который доступен для запроса посредством протокола HTTP по визуально-неотображаемому пути (URL):

    Это доступное в сети Интернет хранилище всех символов для всех публичных продуктов, выпущенных Microsoft за последние несколько лет. Огромный плюс предоставления отладочных символов онлайн заключается в том, что все отладчики Microsoft (независимые как WinDbg , KD и поставляемые в составе продуктов, как MS Visual Studio Debugger), а так же ряд сторонних отладочных средств, теперь имеют возможность автоматически загружать символы непосредственно с сервера в зависимости от версии отлаживаемого двоичного кода. Представляется, сколько времени можно сэкономить по сравнению с ситуацией, когда Вы в ручном режиме вынуждены подцеплять символы именно той версии модуля, которую вы отлаживаете в данный момент.

    Формат PDB

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

    • Файлы .COFF , содержащие данные в формате Common Object File Format (COFF);
    • Файлы .CV , содержащие данные в формате CodeView. Формат хранения символов от Microsoft. Устаревший;
    • Файлы .SYM (Symbols). Устаревший формат;
    • Файлы .DBG (Debug), содержащие данные в формате COFF (Common Object File Format). Довольно распространенный формат, совместимый с большим количеством старых отладчиков. Однако, не может содержать информацию по строкам исходного кода;
    • Файлы .PDB (Program Database), содержащие данные в формате MSF (Multi-Stream Files). Современный продвинутый формат, разработанный Microsoft. Может содержать намного больше информации, чем .dbg.

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

    • Публичные символы: все функции, статические и глобальные переменные;
    • Список объектных файлов которые отвечают за секции кода в исполняемом файле;
    • Информация о оптимизации указателя фрейма стека (FPO);
    • Имена локальных переменных;
    • Объявление классов;
    • Определения перечислений;
    • Тип локальных переменных. Благодаря этому отладчик или дизассемблер могут не только считывать из памяти значения переменных, но и выводить эти значения на экран в определенном виде (в зависимости от типа переменной);
    • Имена структур данных;
    • Тип структур данных;
    • Приватные символы: исходный текст программы;
    • Приватные символы: информация о номерах строк в исходном тексте;

    PDB файл служит для:

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

    Для проверки совместимости между бинарным файлом и файлом символов PDB компоновщик вносит в них GUID (глобальный уникальный идентификатор), которые должны быть идентичны в обоих файлах. Если они различаются, отладчики довольно часто отказываются подключать символы. Файл отладочных символов также содержит оригинальный путь к исходным файлам и, при необходимости, адрес сервера системы управления версиями, откуда можно эти исходные файлы получить.
    В настоящее время у Microsoft наиболее распространен формат PDB версии 2 (MS Visual Studio 6.0) и PDB 7.0 (MS Visual Studio 7.0+). Данные форматы, в силу своей архитектуры, позволяют получать расширенную информацию об исполняемых модулях, в том числе возможность разбора стека, получения локальных переменных и так далее. PDB-файлы содержат данные в формате MSF (Multi-Stream Files) и в них по первым 32 байтам можно обнаружить сигнатуру Microsoft C/C++ MSF 7.00\r\n\032DS\0\0 . В формате MSF вся информация хранится в потоках (аналогия с файлами в файловой системе), при этом каждый поток имеет собственный идентификатор, данные, массив номеров страниц, количество занимаемых страниц. Различные потоки хранят информацию о различных структурах символов, таких как типы переменных, функции и прочее.
    Другое преимущество PDB заключается в том, что становится возможна пошаговая отладка по исходному тексту, при условии конечно же, доступности этого самого исходного текста.

    Выводы

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

    Читайте также:  После обновления windows мерцает экран
    Оцените статью
    Adblock
    detector