Подтвердить что ты не робот

Компиляция не выполняется случайным образом: "невозможно открыть базу данных программы"

Во время длинной компиляции с Visual Studio 2005 (версия 8.0.50727.762) иногда я получаю следующую ошибку в нескольких файлах в каком-то проекте:

fatal error C1033: cannot open program database 'v:\temp\apprtctest\win32\release\vc80.pdb'

(Файл указан как vc80.pdb или vc80.idb в файле temp dir.)

Следующая сборка того же проекта завершается успешно. Нет другой открытой Visual Studio, которая может обращаться к тем же файлам.

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

4b9b3361

Ответ 1

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

  • Прежде всего, убедитесь, что вы запустили чистый лист. То есть, принудительно удалите выходной каталог сборки до того, как вы начнете свой ночной.
  • Если у вас есть антивирус, антишпион или другие подобные программы на вашей ночной машине, подумайте об их устранении. Если это не вариант, добавьте свою папку obj в список исключений программы.
  • (необязательно). Используйте инструменты, такие как VCBuild или MSBuild, как часть вашей ночи. Я думаю, что лучше использовать MSBuild, если вы работаете на многоядерной машине. Мы используем IncrediBuild для ночных и MSBuild для релизов и никогда не сталкивались с проблемой, которую вы описываете.

Если ничего не работает, вы можете запланировать сторожевой таймер script через несколько часов после начала сборки и проверить его статус; если сборка не выполняется, сторожевой таймер должен перезапустить ее. Это уродливый взлом, но это лучше, чем ничего.

Ответ 2

Мы так много видели на моем сайте. Это объяснение, от Питера Кауфмана, кажется наиболее правдоподобным на основе нашей установки:

При создании решения в Visual Studio 2005 вы получаете ошибки, такие как фатальная ошибка C1033: не удается открыть базу данных программы "xxx\debug\vc80.pdb". Тем не менее, при запуске сборки во второй раз это обычно преуспевает.

Причина. Возможно, что два проекта в решении записывают свои выходы в один и тот же каталог (например, "xxx\debug" ). Если максимальное количество настроек параллельных проектов в Tools - Options, Projects and Solutions - Bild и Run установлено на значение больше 1, это означает, что два потока компилятора могут пытаться получить доступ к тем же файлам одновременно, в результате чего файл разделение конфликтов. Решение. Проверьте настройки проекта и убедитесь, что ни один из двух проектов не использует один и тот же каталог для выходных, целевых или любых промежуточных файлов. Или установите максимальное количество параллельных построений проектов в 1 для быстрого обходного пути. Я столкнулся с этой проблемой при использовании файлов проекта VS, поставляемых с библиотекой CLAPACK. ОБНОВЛЕНИЕ. Существует вероятность, что Tortoise SVN обращается к "vc80.pdb", даже если файл не находится под управлением версиями, что также может привести к описанной выше ошибке (спасибо Liana за сообщение об этом). Однако я не могу подтвердить это, так как я не смог воспроизвести проблему, убедившись, что для всех проектов используются разные выходные каталоги.

Ответ 3

Переключите отладочную информацию в формат C7 вместо использования PDB.

Project Options -> C/C++ -> General -> Debug Information Format и установите его на C7.

Ответ 4

Это обычно происходит, когда ваши предыдущие попытки отладки не полностью отключили отладчик. В диспетчере задач найдите процесс под названием vcjit, убейте его и повторите попытку. Худший вариант перезапуска визуальной студии, это должно решить вашу проблему.

Ответ 5

У меня была эта проблема сегодня, и она оказалась неанси-символами на пути к pdb, вызвавшему ее.

Я использую окна через vmware, и мой проект находился в общем расположении:\vmware-host\Shared Folders\project

Когда я переместил его в \Users\julian\project, он решил проблему.

Ответ 6

Попробуйте щелкнуть правой кнопкой мыши на excutable файле VS.... и Properties- > Compatibility- > Tick "Запустить эту программу в режиме совместимости для:" OFF........

Ответ 7

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

Ответ 8

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

Ответ 10

Я изменил свой промежуточный каталог на:

%TEMP%\$(ProjectName)\$(Platform)\$(Configuration)\

к

C:\temp\$(ProjectName)\$(Platform)\$(Configuration)\

Теперь он работает. НЕТ идеи, почему.

Ответ 11

У меня такая же проблема C1033: cannot open program database,

Сценарий

У меня есть две dll parent.dll и child.dll. Я просто приложил проект child.dll с помощью отладчика visual studio в то же время, я пытаюсь создать parent.dll, создает ошибку C1033: cannot open program database

Решение

Остановить отладку и завершить процесс, связанный с отладчиком. Восстановите проект

Ответ 12

Это происходит со мной последовательно, если я Ctrl + Break для отмены сборки (vs2015). Там какой-то процесс, который не закрывается должным образом. Я отправился в ярость "End Tasking" ms/vs связанные процессы (ищите дубликаты), и моя сборка снова работала. Возможно, перезапуск тоже будет работать. Как и в gnu binutils.

Вредоносные инструменты разблокировки не сообщают о каких-либо процессах, блокирующих файл, окна не позволяют мне удалить .pdb, но я могу переименовать его. Мое предположение заключается в том, что в процессе сборки одновременно происходят два процесса.