отладочная информация не найдена или не соответствует визуальной студии - PullRequest
41 голосов
/ 24 февраля 2010

Я скопировал существующий проект и переименовал папку. Теперь я получаю эту ошибку при попытке скомпилировать приложение

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

Если я нажимаю "да", он компилируется и работает нормально. Но теперь я должен разобраться с этим сообщением. Просто интересно, что я изменяю в свойствах проектов, чтобы остановить его.

Ответы [ 14 ]

64 голосов
/ 24 февраля 2010

Возможно, вы отключили отладочную информацию для вашего проекта:

  • Щелкните правой кнопкой мыши по вашему проекту -> Свойства
  • Свойства конфигурации -> Линкер -> Отладка
  • Переключить «Создать информацию отладки» с Нет на Да

Перестройте свой проект и повторите попытку, теперь он должен работать без сообщения:)

30 голосов
/ 24 февраля 2010

Основная причина в том, что у вас нет соответствующих pdb и exe.

Некоторые возможные решения:

  • Вы компилируете в выпуске вместо отладки
  • Вам нужно почистить / построить или восстановить
  • Ваши pdb-файлы не создаются в том же каталоге, что и exe
  • У вас несоответствующий pdb, возможно, скопированный источник новее, чем сегодняшняя дата, и что-то строится неправильно.
  • Попробуйте очистить все объектные файлы отладки
  • Вы присоединяетесь к процессу, который вы запустили из другого места, из которого существуют ваши сборки exe и pdb
  • Перезапустить Visual Studio
10 голосов
/ 06 августа 2010

Это происходит со мной время от времени, при отладке кода и внесении изменений кажется, что visual studio кэширует информацию pdb, а иногда она застревает. Выполнение решения Rebuild, удаление pdb и создание нового не решает проблему.

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

Visual Studio, похоже, доволен pdb в памяти и отказывается обновлять его, независимо от отметок времени или даже изменений размера в pdb.

Единственный способ сбросить это - выйти из Visual Studio (IDE) и снова запустить его.

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

Удачи

7 голосов
/ 08 февраля 2014

Я только что столкнулся с этой ошибкой в ​​VS2012. Это определенно вызвано ошибкой в ​​Visual Studio, которая проявляется в ситуациях, когда локальный файл PDB основного проекта имеет то же имя, что и конечный файл PDB для всего исполняемого файла (даже если они находятся в разных каталогах!)

Рассмотрим этот пример.

Решение состоит из трех проектов: main, a и b. main является проектом верхнего уровня для исполняемого файла, в то время как a и b являются библиотеками, связанными с main.

Во всех трех проектах $(IntDir) переменная установлена ​​на $(SolutionDir)\$(Configuration)\$(ProjectName)\. Это означает, что проект main выводит свои промежуточные файлы в Debug\main\, проект a - в Debug\a\ и т. Д.

В настройках C/C++ -> Output Files все три проекта имеют значение Program Database File Name, установленное на $(IntDir)$(TargetName).pdb. Это означает, что проект main создает свой локальный файл PDB как Debug\main\main.pdb, проект b как Debug\b\b.pdb и т. Д.

Наконец, в Linker -> Debugging настройках проекта main значение Generate Program Database File установлено на $(OutDir)$(TargetName).pdb. Это означает, что глобальный файл PDB для всего исполняемого файла будет сгенерирован как Debug\main.pdb.

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

В этой настройке вы получите Отладочная информация не найдена или не соответствует ошибке , если вы попытаетесь запустить программу под отладчиком. И если вы посмотрите на файл Debug\main.pdb (который будет существовать), вы заметите, что он точно такой же, как файл Debug\main\main.pdb! То есть каким-то образом локальная PDB для main смогла перезаписать то, что должно было быть глобальной PDB для конечного исполняемого файла. То есть отладчик вправе жаловаться, что файл PDB «неправильный». Это действительно неправильно.

Опять же, в приведенной выше настройке конечная глобальная PDB каким-то образом перезаписывается локальной PDB верхнего проекта. Я не знаю, почему это происходит. Кажется, это ошибка. (Обратите внимание, что, хотя эти файлы PDB имеют одно и то же имя, они создаются в разных каталогах, то есть они не должны конфликтовать.)

Обходной путь, решающий эту проблему, - присвоить локальной PDB проекта main другое имя. Например, просто перейдите к C/C++ -> Output Files для проекта main и измените значение Program Database File Name на $(IntDir)$(TargetName)_local.pdb (или на $(IntDir)12345.pdb, если хотите). Это устранит конфликт и решит проблему.

3 голосов
/ 27 октября 2017

Включить создание PDB с помощью:

Щелкните правой кнопкой мыши на MyProject > Properties > Debugging:

  • C/C++ > General > Debug Information Output = Program Database (/Zi)
  • Linker > Debugging > Generate Debug Info = Yes (/DEBUG)

Очистите MyProject, перезапустите Visual Studio (просто чтобы убедиться), перестройте MyProject. Выходная папка должна содержать файлы * .pdb.

Если вы отлаживаете оптимизированный / выпускаемый код, рассмотрите возможность отключения оптимизации с помощью

  • C++ > Optimization > Optmization = Disabled (/Od)
2 голосов
/ 13 марта 2013

Я столкнулся с той же проблемой и попробовал все вышеупомянутые решения, но это не помогло мне. Затем я случайно нашел новое решение, и оно сработало.

Решение состоит в том, что, если у вас есть много проектов в решении, вы должны пометить любой (конкретный, который вы должны решить) проект как «Сделать стартовым проектом». Щелкните правой кнопкой мыши по этому конкретному проекту и выберите «Сделать стартовым проектом».

Это сработало для меня.

1 голос
/ 24 февраля 2010

Файл pdb или Program Database, по-видимому, отсутствует (в основном, путь изменился и больше не может быть найден компилятором). См. этот связанный пост для получения дополнительной информации.

0 голосов
/ 13 апреля 2017

У меня была та же проблема, и эта ссылка помогла мне решить проблему, переименовав "symsrv.no" в "symsrv.yes" в папке VS IDE.

0 голосов
/ 17 февраля 2017

Эта проблема беспокоила меня давно. Ответ AnT очень полезен. Основная идея: Не иметь двух файлов pdb с одинаковым именем , даже если они не находятся в одном каталоге.

Это моя ситуация: у меня есть два проекта с названиями «FooBar» и «FooBarDll», первый - exe, а второй - dll. Я установил для обоих проектов Target Name значение «FooBar», чтобы они генерировали «FooBar.exe» и «FooBar.dll» соответственно.

Тогда я установил

  1. «Общий -> Промежуточный каталог» будет «$ (OutDir) \ $ (ProjectName) \»
  2. «C / C ++ -> Выходные файлы -> Имя файла базы данных программы» будет «$ (IntDir) $ (TargetName) .pdb»
  3. "Линкер -> Отладка -> Создать файл базы данных программы", равный "$ (OutDir) $ (TargetName) .pdb"

Итак, я получаю эти файлы:

  1. Debug \ FooBar.exe
  2. Debug \ FooBar.pdb // C ++ pdb
  3. Debug \ FooBar \ FooBar.pdb // Linker pdb

  4. Debug \ FooBar.dll

  5. Debug \ FooBar.pdb // C ++ pdb снова!
  6. Debug \ FooBarDll \ FooBar.pdb // Linker pdb

Мое решение заменяет каждое "TargetName" на "ProjectName", тогда я получу:

  1. Debug \ FooBar.exe
  2. Debug \ FooBar.pdb // C ++ pdb
  3. Debug \ FooBar \ FooBar.pdb // Linker pdb

  4. Debug \ FooBar.dll

  5. Debug \ FooBarDll.pdb // C ++ pdb
  6. Debug \ FooBarDll \ FooBarDll.pdb // Linker pdb

Тогда конфликта нет!

Дать C / C ++ pdb суффикс может быть лучше, например: "C / C ++ -> Выходные файлы -> Имя файла базы данных программы", чтобы быть "$ (IntDir) $ (ProjectName) _C.pdb"

0 голосов
/ 24 марта 2016

Скорее всего, есть и другие причины, такие как несоответствие файла .pdb / .exe, что-то не было построено / перестроено, но у меня был похожий случай в Visual studio 2013 -

Что-то связанное с виртуальной встроенной функцией - так что я подозреваю.

В моем случае отладчик прыгал в середине другой функции C ++, а не той, которая была вызвана. Переход был от исходного кода на 11 строк исходного кода, но я не могу объяснить, почему произошло много просчетов. Простыми функциями перестановки я избавился от этой проблемы.

Может потребоваться более подробный анализ, почему изначально произошло смещение на 11 строк.

Не видел такого поведения в любой другой визуальной студии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...