Отладчик Visual Studio 2010 собран правильно - компилятор pdb и компоновщик pdb не синхронизированы? - PullRequest
2 голосов
/ 02 августа 2011

У меня есть решение в MS VS 2010, которое правильно компилируется и собирается после перестройки всего (1). Однако после внесения изменений в исходный файл и начала отладки VS обнаруживает, что проект устарел, и успешно строит проект (2) (как и ожидалось).

Проблема в том, что VS начинает отладку проекта, используя obj / pdb / etc .. из (1) выше вместо (2). Если я вхожу в отладчик и перехожу к модулю, который изменился в интересующем файле, мне говорят, что «исходный файл отличается от того, когда модуль был собран». Указывая, что я не хочу перестраивать исходный код, я получаю следующую информацию ниже: (Обратите внимание, что для того, чтобы получить «хорошую» сборку, мне нужно перестроить решение (или удалить vc100.pdb)).


Поиск источника для "файла интереса". Контрольная сумма: MD5 {59 96 7d 1 9f b 33 20 63 4c 81 1d d7 c6 94 30}

Определение соответствия контрольной суммы для следующих местоположений: 1: контрольная сумма "интересующего файла": MD5 {61 66 43 cb d1 97 d1 d5 0 dc 9b 60 64 71 b2 b6} Контрольная сумма не совпадает. Файл "файл интереса" существует.

Поиск в документах сценария "интересующего файла" ...

Определение соответствия контрольной суммы для следующих местоположений:

1: контрольная сумма "файла интересов": MD5 {61 66 43 cb d1 97 d1 d5 0 dc 9b 60 64 71 b2 b6} Контрольная сумма не совпадает.

Поиск в проектах "интересующего файла".

Файл не найден в проекте.

Поиск в каталоге

.

Разное каталоги

.

Отладчик попросит пользователя найти файл: «файл интереса».

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

Отладчику не удалось найти исходный файл «интересующий файл».


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

Кажется, что "rebuild" правильно собирает и vc100.pdb, и отладчик pdb, тогда как "нормальная" сборка касается только компилятора / компоновщика vc100.pdb ... но я не уверен.

У кого-нибудь есть идеи?

Спасибо

Пол

Ответы [ 6 ]

8 голосов
/ 17 ноября 2011

Решение очень простое.

  • Просто исключите файл из проекта (тот, для которого контрольная сумма проблема возникла).

  • Включить тот же файл снова в проект

  • Перестроить весь проект

Вот и все. Я надеюсь, что это решит вашу проблему. SAM

2 голосов
/ 03 августа 2011

Проблема не в pdb, а в том, что VS неправильно определяет, когда нужно перекомпилировать модули.

В частности, у меня есть база кода с исходным кодом, которая тестируется с помощью набора модульных тестов.

Модульные тесты отключаются от основного файла, например MainTest.cpp, который имеет функцию int main (...), которая запускает все тесты. Это просто файл клея и редко меняется. Часто изменяемые файлы - это импортируемые тестовые классы.

Теперь все мои тестовые классы «без заголовка», то есть все определения / объявления содержатся в одном модуле (например, TestClass1.cpp, TestClass2.cpp и т. Д.), Главным образом потому, что они просто тесты, а я не хочу лишнего беспорядка.

Проблема в том, что когда я делаю изменения в TestClass1.cpp и собираю, VS 2010 не считает необходимым пересобирать MainTest.cpp, говоря:

Пропуск ... (соответствующих изменений не обнаружено) MainTest.cpp

Видимо, это известная проблема, см .:

http://connect.microsoft.com/VisualStudio/feedback/details/99825/code-change-in-header-does-not-re-compile-correctly

Чтобы правильно собрать, я должен заставить VS перекомпилировать MainTest.cpp. В качестве обходного пути я добавил «Touch MainTest.cpp» в событие Pre-Build Event моего проекта.

Некоторые дополнительные вопросы:

  1. MS намеревается это исправить? Если да, то они?
  2. Есть ли лучший обходной путь?
1 голос
/ 08 июня 2012

Исключение файла из проекта и последующее его включение в файл компиляции проекта - единственное сработавшее решение.Спасибо СЭМ.Я пишу так, чтобы документировать потенциальные решения и показать, что это предложение было наиболее эффективным.

Следующие часто предлагаемые решения не работали:

  1. Ручная компиляция всех файлов .cppв проекте, используя правую кнопку мыши в обозревателе решений.
  2. Касаясь Main.cpp (выполняется: touch main.cpp) или любых / всех файлов проекта, затем перестраивая проект.
  3. Сброс проектанастройки (внутри инструмента-> Настройки импорта и экспорта) и перекомпиляция проекта.
0 голосов
/ 26 февраля 2014

Проблема возникает из-за файла PDB. Очистите проект и восстановите его. Или удалите файл из проекта, включите его снова и пересоберите.

0 голосов
/ 26 февраля 2014

проблема с файлом PDB.сделать Clean на проекте перед перестройкой

0 голосов
/ 23 июля 2012

Я нашел, как воспроизвести его

если для Промежуточного каталога установлено что-то вроде

$(TMP)\Build\$(SolutionName) - $(Platform).$(Configuration) - $(ProjectName)\

тогда компоновщик не увидит изменений, но если вы установите его на

S:\Build\$(SolutionName) - $(Platform).$(Configuration) - $(ProjectName)\

тогда связь будет в порядке

...