Компиляция происходит случайно: «не удается открыть базу данных программы» - PullRequest
34 голосов
/ 24 сентября 2008

Во время долгой компиляции с 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, которые могли бы получить доступ к тем же файлам.

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

Ответы [ 12 ]

21 голосов
/ 24 сентября 2008

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

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

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

21 голосов
/ 24 сентября 2008

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

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

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

8 голосов
/ 18 августа 2013

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

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

6 голосов
/ 25 сентября 2008

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

1 голос
/ 09 февраля 2015

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

1 голос
/ 21 марта 2014

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

1 голос
/ 05 мая 2011

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

1 голос
/ 23 ноября 2010

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

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

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

0 голосов
/ 25 марта 2017

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

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

0 голосов
/ 29 апреля 2016

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

Сценарий

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

Решение

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

...