Отладочная информация не может быть найдена или не соответствует визуальной студии

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

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

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

14 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

Удачи

Я только что столкнулся с этой ошибкой в ​​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 если ты так желаешь). Это устранит конфликт и решит проблему.

Включить создание 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 или файл базы данных программы, по-видимому, отсутствует (в основном путь изменился и больше не может быть найден компилятором). Смотрите этот пост для получения дополнительной информации.

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

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

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

  1. "Общий -> Промежуточный каталог" будет "$ (OutDir) \ $ (ProjectName) \"
  2. "C / C++ -> Выходные файлы -> Имя файла базы данных программы" будет "$ (IntDir) $ (TargetName).pdb"
  3. "Linker -> Debugging -> Generate Program Database File" ("Файл компоновщика -> Отладка -> Создать файл базы данных программы") будет иметь значение "$(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"

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

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

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

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

Удачи

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

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

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

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

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

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

...\Custom Librarry (MyDll.dll(

в

...\Custom Librarry (MyDll.dll)

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

Другие вопросы по тегам