Отладочная информация не может быть найдена или не соответствует визуальной студии
Я скопировал существующий проект и переименовал папку. Теперь я получаю эту ошибку при попытке скомпилировать приложение
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" соответственно.
Тогда я установил
- "Общий -> Промежуточный каталог" будет "$ (OutDir) \ $ (ProjectName) \"
- "C / C++ -> Выходные файлы -> Имя файла базы данных программы" будет "$ (IntDir) $ (TargetName).pdb"
- "Linker -> Debugging -> Generate Program Database File" ("Файл компоновщика -> Отладка -> Создать файл базы данных программы") будет иметь значение "$(OutDir)$(TargetName).pdb"
Итак, я получаю эти файлы:
- Debug \ FooBar.exe
- Debug \ FooBar.pdb //C++ pdb
Debug \ FooBar \ FooBar.pdb // Linker pdb
Debug \ FooBar.dll
- Debug \ FooBar.pdb //C++ pdb снова!
- Debug \ FooBarDll \ FooBar.pdb // Linker pdb
Мое решение заменяет каждое "TargetName" на "ProjectName", тогда я получу:
- Debug \ FooBar.exe
- Debug \ FooBar.pdb //C++ pdb
Debug \ FooBar \ FooBar.pdb // Linker pdb
Debug \ FooBar.dll
- Debug \ FooBarDll.pdb //C++ pdb
- 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)
просто закрыв скобки это сработало!