отладочные сведения не могут быть найдены или не соответствуют visual studio

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

debugging information cannot be found or does not match. No symbols loaded. 
Do you want to continue debugging ?

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

14 ответов


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

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

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

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

  • Правой Кнопкой Мыши на проект -> свойства
  • свойства конфигурации -> Компоновщик -> отладка
  • переключатель "создать отладочную информацию" от Нет До да

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


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

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

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

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

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

Удачи


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

рассмотрим такой пример.

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

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

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

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

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

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

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

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


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

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

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


включить создание 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)

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


У меня была аналогичная проблема, и причина заключалась в том, что я запустил один из проектов моего решения в другом процессе, и этот процесс не мог быть убит. Я не придал этому значения. Поэтому, когда я создавал решение в отдельной среде, один из файлов pdb не совпадал, поэтому в конце я не мог загрузить ни один из файлов pdb. Я просто перезагрузил компьютер, и это исправило его.

удачи


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


щелкните правой кнопкой мыши на своем проекте в браузере решений => Clean => Build. То есть если сборка создает .pdb вообще (посмотрите в своем целевом каталоге) Если нет, вы должны включить отладку шагами, упомянутыми в других сообщениях


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

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

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

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

не видели такого поведения в любой другой visual studio.


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

Это моя ситуация: у меня есть проекты буксировки "FooBar" и "FooBarDll", первый-exe, а второй-dll. Я установил оба проекта Имя быть "FooBar", так что они будут генерировать " FooBar.exe " и " FooBar.dll файлы" соответственно.

затем я поставил

  1. "General - > Intermediate Directory "будет" $(OutDir)\$(имя проекта)\"
  2. "C / C++ - > выходные файлы - > имя файла базы данных программы "должно быть" $(IntDir)$(TargetName).pdb"
  3. "Компоновщик - > отладка - > создать файл базы данных программы", чтобы быть " $(OutDir)$(TargetName).pdb"

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

  1. Debug\FooBar.exe
  2. Debug\FooBar.ПДБ //Си++ pdb
  3. Debug\FooBar\FooBar.ПДБ //Линкер ГКБ

  4. Debug\FooBar.dll файлы

  5. Debug\FooBar.ПДБ // C++ в ГКБ еще раз!
  6. Debug\FooBarDll\FooBar.ПДБ // Линкер ГКБ

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

  1. Debug\FooBar.exe
  2. Debug\FooBar.ПДБ //Си++ pdb
  3. Debug\FooBar\FooBar.ПДБ //Линкер ГКБ

  4. Debug\FooBar.dll файлы

  5. Debug\FooBarDll.ПДБ // C++ в ГКБ
  6. Debug\FooBarDll\FooBarDll.ПДБ // Линкер ГКБ

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

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


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


любопытно, со мной случается, что мне нужно было изменить имя папки с:

...\Custom Librarry (MyDll.dll(

to

...\Custom Librarry (MyDll.dll)

просто закрыв скобки, это сработало !