Говорят, что символы отладки не загружены для документа, даже если они загружены для DLL - PullRequest
3 голосов
/ 22 июня 2011

Я создал определенную библиотеку DLL с отладочной информацией (опция компилятора / Zi и опция компоновщика / DEBUG).Через оператор прерывания в основной программе я запустил Visual Studio для отладки.В списке модулей, показанном как видно из меню Debug-> Windows, я мог видеть, что символы были загружены для интересующей dll. Однако, когда я открываю файл C ++ из этой dll и пытаюсь установить точку останова, он говорит отладкусимволы не доступны для документа.Нет сомнений в том, что этот файл C ++ был скомпилирован в эту dll, и что это тот же источник, который использовался для сборки dll (я только сделал это).Почему это происходит?Пожалуйста, помогите, прежде чем я застрелюсь.

Ответы [ 4 ]

3 голосов
/ 02 июля 2011

У меня нет окончательного ответа, только несколько предложений.

  • Иногда mdm.exe (диспетчер отладки машины) перестает работать должным образом. Завершение процесса и перезапуск Visual Studio помогает. Если проблема сохраняется между перезагрузками, это, вероятно, не является причиной.

  • Время исходного файла (последнее изменение), которое будет в будущем, может вызвать всевозможные странные проблемы. Чтобы проверить время файла, вы можете выполнить поиск ничего (Windows XP) или «*» (Windows 7). Это будет список всех файлов в выбранной папке. Затем отсортируйте результат по дате, чтобы увидеть максимальное / минимальное время файла. Я не знаю , откуда исходит неправильное время файла - я просто знаю, что это происходит время от времени. Может быть, сама Visual Studio, может быть другой инструмент, который я использую.

  • Вы можете попробовать запустить приложение, использующее вашу DLL, из Visual Studio, когда ваш проект DLL уже открыт. Для этого откройте «Свойства конфигурации», выберите страницу «Отладка» и введите .exe, который должен быть запущен (+ аргументы, если они вам нужны). Затем запустите сеанс отладки, как для проекта .exe.

  • Решение многих проблем с Visual Studio состоит в том, чтобы «очистить» проект вручную и выполнить полную перекомпиляцию. Удалите все файлы, которые были сгенерированы в процессе сборки или в которых хранятся «опции» решения или проекта. то есть все .suo .ncb .user файлы плюс все в «промежуточной» и «выходной» папках. Если вы используете систему контроля версий, просто извлеките весь проект из системы контроля версий в чистую директорию и выполните сборку с нуля. (Получение всего «свежего» из управления исходным кодом также решает любые потенциальные проблемы со временем файла - по крайней мере, в системах управления исходным кодом, которые не сохраняют время файла)

  • Другой возможной причиной может быть то, что VS загружает неправильный файл .pdb. Файл .pdb с соответствующим именем можно найти в каталоге серверов символов / символов, сконфигурированном для VS (или в масштабе всей системы через переменную _NT_SYMBOL_PATH), или в каталоге кэша символов VS. Как файл .pdb с соответствующим именем оказался в таком месте - это отдельная история, но можно легко проверить, загружен ли неправильный файл .pdb: удалите файл .pdb, сгенерированный сборкой, и запустите сеанс отладки , Если VS отслеживает «символы, загруженные» для рассматриваемого файла .exe / .dll, он должен найти файл .pdb в другом месте.

  • Иногда кажется, что VS каким-то образом портит точки останова. Я точно не знаю, когда или как это происходит, но один из симптомов состоит в том, что если удалить некоторые точки останова, они волшебным образом появятся при запуске следующей сессии отладки. Я обнаружил, что установка новой точки останова, затем удаление всех точек останова путем отладки / удаления всех точек останова и повторная установка требуемых точек помогают.

0 голосов
/ 28 ноября 2014

В моем случае я переименовал проект C ++. Компилятор выводил newName.lib, в то время как другие мои проекты все еще ссылались на oldName.lib, который, конечно, не будет удален Build->Clean.

Я узнал об этом, следуя совету вручную очистить каталог сборки. Последующий компоновщик unresolved external reference выдал ситуацию.

0 голосов
/ 04 июля 2011

Сделайте Build-> Clean Solution, закройте Visual Studio, затем перезапустите его и сделайте новую сборку.Это случилось со мной однажды, и, похоже, это все исправило, просто некоторая устаревшая информация о pdb.

0 голосов
/ 01 июля 2011

1) Вы вообще не можете достичь точки останова?Как правило, это разрешается, когда нужно нажать на код в модуле или фрейме стека.2) Проверьте, не содержит ли ваш pdb информацию об источнике

...