Форум программистов, компьютерный форум, киберфорум
Visual Studio, VS Code
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
86 / 13 / 1
Регистрация: 24.05.2010
Сообщений: 590

Как использовать отладочные символы для dll в Visual Studio?

23.04.2015, 15:21. Показов 5616. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!

Скачал библиотеку. С ней вместе шел pdb файл. Создаю в VS проект, подключаю эту библиотеку, пробую запустить - вроде работает. Хочу зайти и посмотреть код функции, которая вызывается из dll. На строке с вызовом функции жму Ф11 и в VS открывается страничка, в которой написано, что файл ххх.cs не найден. Файла на самом деле нету, но я думал, что наличие pdb файла решит эту проблему и я смогу посмотреть исходный код. Файл pdb лежит в каталоге с библиотекой.

Я ошибался или просто что-то не так делаю?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.04.2015, 15:21
Ответы с готовыми решениями:

Зачем для создания формы на Angular использовать Visual Studio и Visual Studio Code?
Мне нужно написать форму на ангуляре, которая будет выполнять Select, Insert,Delete из базы данных. Нашла видео, в котором показывают...

Можно ли в коде в Visual Studio использовать в именах переменных подстрочные знаки, спец. символы (типа ∑, ° и т.п.)?
Хотелось бы иметь возможность вместо вот этого: double dP = pResPresent - pResLast; double tempC = 20; для повышения читаемости кода...

Создание DLL файлов для C# в Visual Studio
Здравствуйте. В лабораторной стоит задача создать .dll файл . В мануалах написано,что нужно создать проект->консольное приложение...

5
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18267 / 14190 / 5368
Регистрация: 17.03.2014
Сообщений: 28,879
Записей в блоге: 1
23.04.2015, 16:23
V0fka, в pdb файле хранится информация о именах файлов соответствующих определенному участку кода, но сам исходный код туда не включается. Соответственно для пошаговой отладки обязательно нужны исходники. PDB файл сам по себе дает возможность получить больше информации при возникновении исключения.
0
86 / 13 / 1
Регистрация: 24.05.2010
Сообщений: 590
23.04.2015, 17:48  [ТС]
OwenGlendower, вот оно как. Я много (ну может не очень много) где читал, мол можно скачать отладочные символы для библиотек Виндовса с сервера Майкрософта. И я почему-то думал, что это делается для того, чтобы можно было увидеть код библиотеки. Получается, что нет. А для чего они тогда нужны?

Цитата Сообщение от OwenGlendower Посмотреть сообщение
PDB файл сам по себе дает возможность получить больше информации при возникновении исключения.
Вы бы не могли рассказать как?

После того, что я выше прочитал, я может быть перефразирую немного (или дополню) свой изначальный вопрос: зачем нужны отладочные символы без исходного кода (и нужны ли)?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18267 / 14190 / 5368
Регистрация: 17.03.2014
Сообщений: 28,879
Записей в блоге: 1
23.04.2015, 20:13
V0fka, для начала следует помнить что мы можем иметь дело с управляемым и неуправляемым кодом. Windows написана на ASM/C/C++. Соответственно её DLL состоят из неуправляемого кода. В случае ошибки исполнения мы будем знать адрес в памяти где это произошло + стек вызовов (набор адреса). Это крайне скудная информация. Дополнительные проблемы создают оптимизации которые прозводят компилятор и компоновщик. Для нормальной отладки необходимо сопоставить адреса с именами функций и исходным кодом. И здесь нам на помощь и приходят PDB файлы. Если скачать PDB файлы для Windows, то например Process Explorer будет показывать в стеке вызовов потока названия функций вместо адресов. Также их можно будет использовать при отладке crash дампов.

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

Цитата Сообщение от V0fka Посмотреть сообщение
зачем нужны отладочные символы без исходного кода (и нужны ли)?
Однозначно нужны т.к. в случае возникновения исключения на клиентской машине ты получишь подробную трассировку стека с названиями файлов и номерами строк. Поэтому PDB файлы следует генерировать и распространять вместе с приложением. На всякий случай уточню что речь только о .NET приложениях. В случае с неуправляемым кодом pdb следует генерировать, но хранить только у себя.

Цитата Сообщение от V0fka Посмотреть сообщение
Вы бы не могли рассказать как?
Windows и Visual Studio сами знают как использовать информацию из PDB. Разработчику нет необходимости думать о их содержимом. Отладка это довольно большая тема и в рамках форума её не раскрыть. Советую прочитать книгу Джона Роббинса Отладка приложений для Microsoft .NET.
0
86 / 13 / 1
Регистрация: 24.05.2010
Сообщений: 590
24.04.2015, 16:23  [ТС]
OwenGlendower, вижу, что вы пытались ответить подробно и внятно. Спасибо! Но, к сожалению, я всеравно многих вещей не понял.

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

C#
1
throw new NullReferenceException("Конец");
Собрал ехе-щник в конфигурации Debug, в выходном каталоге получился ряд файлов. Беру оттуда сам ехе-шник и pdb файл, перемещаю их в отдельный каталог. ОС Windows 8. Запускаю программу, жму кнопку - программа закрывается и выдается окошко с 2 кнопками: отладить и закрыть программу:



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

Но, я ж хочу свою программу кому-то отдать. Но там ведь не будет исходников, причем ещё по точно такому же пути, как у меня на компе. Эмулирую такую ситуацию. Перемещаю ехе-ник и pdb файл в каталог на другой комп (с Windows Server 2012, так для информации). Жму кнопку. Выскакивает окошко, которое предлагает уже 3 действия, а так же предлагает "Показать подробности проблемы" (а в предыдущем случае, не предлагало, кстати):



В "подробностях проблемы" я вижу, что это было NullReferenceException, но не в какой функции, не стека вызовов я не вижу. Собственно, у меня снова возникает вопрос: чем мне в этой ситуации может помочь pdb файл?

Цитата Сообщение от OwenGlendower
Однозначно нужны т.к. в случае возникновения исключения на клиентской машине ты получишь подробную трассировку стека с названиями файлов и номерами строк. Поэтому PDB файлы следует генерировать и распространять вместе с приложением. На всякий случай уточню что речь только о .NET приложениях. В случае с неуправляемым кодом pdb следует генерировать, но хранить только у себя.
А чем отличаются pdb файлы для управляемого и не управляемого кода? Почему в случае с не управляемым кодом их отдавать нельзя (не нужно)?

Цитата Сообщение от OwenGlendower
Windows и Visual Studio сами знают как использовать информацию из PDB. Разработчику нет необходимости думать о их содержимом. Отладка это довольно большая тема и в рамках форума её не раскрыть. Советую прочитать книгу Джона Роббинса Отладка приложений для Microsoft .NET.
Спасибо! Запишу себе книжку в планы.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
24.04.2015, 17:07
OwenGlendower, на самом деле недавно мне как раз нужно было задебажить BCL (класс строки, что ли), но на 2015 студии так и не получилось Сырая всё еще, все-таки. Но вот в 2013 это возможно

http://referencesource.microsoft.com/setup.html

Естественно, это касается только кода, который написан на управляемом шарпе. Вызовы в неуправляемый код/винапи вы задебажить не сможете.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.04.2015, 17:07
Помогаю со студенческими работами здесь

Как использовать классы dll в Visual C++
Если есть dll, созданная скажем в VB и содержащая класс(форма), то как использовать этот класс в VC++?

Как использовать функцию window в Visual Studio?
В компиляторе Borland C++ есть функция void window(int left,int top,int right,int bottom) Вопрос в том, есть ли альтернатива этой...

Как использовать превью языка C# 8 в Visual Studio?
Всем привет, возможно ли использовать превью версию языка c# как-то?

Как использовать библиотеки, скомпилированные в Visual Studio, в Билдере?
У кого-нибудь получалось? Пытался использовать так: 1) компилил dll в VS 2) получал lib из dll через implib.exe 3) использовал...

Как использовать Borland lib файл в MS Visual Studio
Здравствуйте! Можно ли существующий lib файл, скомпилпрованный в Borland C++ Builder подключить к проекту в Visual Studio?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru