Картинка блога

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

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

PDB (Program Database) или файл символов приложения.

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

Так вот, чтобы отладчик начал видеть стек внешней библиотеки, ее достаточно добавить (вместе с .DLL с которой он был создан) в соответствующую папку. В самом простом варианте, это папка bin/Debug вашего приложения. Для компаний с общим репозиторием предусмотренно общее хранилище для PDB файлов. Настроить его можно из Tools->Options->Debugging->Symbols.

Если все сделано правильно, внешний код будет доступен для отладки, и исходной код будет открыватся прямо в окне VS.

Отладка внешних библиотек через навигацию кода.

Даже если PDB библиотеки ао файловой ссылке установлена в правильном месте VS не даст спокойно заниматся навигацией по коду с помощью F12. В отличае от других IDE, VS будет продолжать открывать только мета информацию. Есть только один способ заставить VS открывать такой код «нормально», это добавить исходной код к решению (Solution) как существующий проект (File->Add->Existing project).

Такой подход накладывает некоторые неудобства:

  • Вынужденное конвертирование проекта к другой версии (библиотека на VS2005, а приложение на Vs2008).
  • Дополнительный контроль над измененными файлами (слишком просто теперь можно изменить код библиотеки и случайно сохранить изменения на сервере).

 

Метки:, , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>