Случайный сбой компиляции:“не удается открыть базу данных программы”

StackOverflow https://stackoverflow.com/questions/126751

Вопрос

Во время длительной компиляции с 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 во временном разделе проекта.)

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

Сегодня у меня возникла эта проблема, и оказалось, что причиной ее были символы, отличные от ansi, в пути к pdb.

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

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

Попробуйте щелкнуть правой кнопкой мыши оправдываемый файл VS .... и Свойства-> Совместимость-> Отметьте "Запустить эту программу в режиме совместимости для:" ВЫКЛЮЧЕННЫМ........

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

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

Вы вообще используете LinqToSql?Возможно, это похоже на странную ошибку, с которой я время от времени буду сталкиваться, как я задал в этом вопросе: Что приводит к тому, что Visual Studio не удается загрузить сборку неправильно?

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

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

Для

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

Теперь это работает.ПОНЯТИЯ не имею, почему.

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

Сценарий

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

Решение

Остановите отладку и завершите процесс, подключенный к отладчику.Перестройте проект

Это происходит со мной постоянно, если я Ctrl+Перерыв чтобы отменить сборку (vs2015).Есть какой-то процесс, который не отключен должным образом.Я взбесился, "Завершив выполнение задач" связанных с ms / vs процессов (поиск дубликатов), и моя сборка снова заработала.Перезапуск, вероятно, тоже сработал бы.Как и переход на gnu binutils.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top