Компиляция не выполняется случайным образом: "невозможно открыть базу данных программы"
Во время длинной компиляции с 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, которая может обращаться к тем же файлам.
Это серьезная проблема, потому что она делает невозможным компиляцию в ночное время.
Ответы
Ответ 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
был обработчик открытого файла. Убив этот процесс, я устранил проблему, и я смог ее скомпилировать.
Ответ 9
Используете ли вы LinqToSql? Возможно, это похоже на нечетную ошибку, с которой я иногда сталкиваюсь, когда я задавал этот вопрос: Что заставляет Visual Studio неправильно загружать сборку?
Ответ 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
, но я могу переименовать его. Мое предположение заключается в том, что в процессе сборки одновременно происходят два процесса.