web-dev-qa-db-ja.com

コンパイルがランダムに失敗する:「プログラムデータベースを開けません」

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 openはありません。

毎晩のコンパイルが不可能になるため、これは深刻な問題です。

36
Lev

書き込み時にアンチウイルスまたは同様のプログラムがpdbファイルに接触している可能性があります。このシナリオでは、アンチウイルスが最も疑われます。私のショップでナイトリービルドを設定した私の過去の経験に基づいて、私はあなたにいくつかの一般的な指針しか与えることができないと思います。これらのいくつかはささいなことのように聞こえるかもしれませんが、私は完成のためにそれらを含めています。

  • まず第一に、白紙の状態で起動することを確認してください。つまり、毎晩始める前に、ビルドの出力ディレクトリを強制削除します。
  • ウイルス対策ソフトウェア、スパイウェア対策プログラム、またはその他の同様のプログラムが夜間マシンにある場合は、それらを削除することを検討してください。それが選択肢でない場合は、objフォルダーをプログラムの除外リストに追加します。
  • (オプション)毎晩、VCBuildやMSBuildなどのツールの使用を検討してください。マルチコアマシンを使用している場合は、MSBuildを使用することをお勧めします。ナイトリーにはIncrediBuildを、リリースにはMSBuildを使用しており、あなたが説明した問題に遭遇したことはありません。

他に何も機能しない場合は、ビルド開始の数時間後にウォッチドッグスクリプトをスケジュールして、そのステータスを確認できます。ビルドが失敗した場合、ウォッチドッグは再起動する必要があります。これは醜いハックですが、何もしないよりはましです。

21
Laur

私のサイトでもこれをよく見ました。 この説明 、ピーターカウフマンから、私たちのセットアップに基づいて最ももっともらしいようです:

Visual Studio 2005でソリューションをビルドすると、致命的なエラーC1033:プログラムデータベース 'xxx\debug\vc80.pdb'を開けませんなどのエラーが発生します。ただし、2回目にビルドを実行すると、通常は成功します。

理由:ソリューションの2つのプロジェクトが同じディレクトリに出力を書き込んでいる可能性があります(例: 'xxx\debug')。 [ツール]-[オプション]、[プロジェクトとソリューション]-[ビルドと実行]の並列プロジェクトビルドの最大数が1より大きい値に設定されている場合、2つのコンパイラスレッドが同じファイルに同時にアクセスしようとして、ファイルが生成される可能性があります。紛争の共有。解決策:プロジェクトの設定を確認し、2つのプロジェクトが出力、ターゲット、またはあらゆる種類の中間ファイルに同じディレクトリを使用していないことを確認します。または、迅速な回避策として、並列プロジェクトビルドの最大数を1に設定します。 CLAPACKライ​​ブラリに付属しているVSプロジェクトファイルを使用しているときに、この非常に問題が発生しました。更新:ファイルがバージョン管理下にない場合でも、Tortoise SVNが「vc80.pdb」にアクセスする可能性があります。これにより、上記のエラーが発生する可能性もあります(これを報告してくれたLianaに感謝します)。ただし、すべてのプロジェクトで異なる出力ディレクトリが使用されていることを確認した後は問題を再現できなかったため、これを確認できません。

23
SCFrench

PDBを使用する代わりに、デバッグ情報をC7形式に切り替えます。

Project Options -> C/C++ -> General -> Debug Information FormatC7に設定します。

8
M.H.

これは通常、前回のデバッグの試行でデバッガーが完全に終了しなかった場合に発生します。タスクマネージャーでvcjitと呼ばれるプロセスを探し、それを強制終了して再試行します。最悪のオプションはビジュアルスタジオを再起動します。これで問題が解決するはずです。

6
mihirg

今日、この問題が発生しましたが、原因となったのは、pdbへのパスに含まれるANSI以外の文字でした。

私はVMwareを通じてWindowsを使用しており、プロジェクトは共有の場所にありました:\ vmware-Host\Shared Folders\project

\ Users\julian\projectに移動すると、問題は解決しました。

1
Julian Mann

Dropboxフォルダーにあるプロジェクトで作業中に同様の問題が発生しました。 Dropboxがファイルにアクセスしてファイルをサーバーにアップロードしているため、システムトレイのDropboxアイコンに小さな「同期」アイコンが表示されると、このエラーがスローされることがわかりました。 Dropboxの同期が完了するまでビルドを待つと、毎回動作しました。

1
Logan

私はこの問題に遭遇しました。 Visual Studioは、開くことができないと不満を言っていましたvc100.pdb。私はprocexpを使用してこのファイルへのオープンファイルハンドルを探し、プロセスmspdbsrvにオープンファイルハンドルがあることを発見しました。このプロセスを強制終了すると問題が解決し、コンパイルできました。

1
Tejas Sharma

VSの実行可能ファイルを右クリックしてみてください。..および[プロパティ]-> [互換性]-> [このプログラムを互換モードで実行する:]にチェックマークを付けます。

1
Vin.X

これは私が一貫して私に起こります Ctrl+Break ビルドをキャンセルするには(vs2015)。正しくシャットダウンされないプロセスがあります。私は大暴れの "End Tasking" ms/vs関連プロセス(重複を探す)を行い、私のビルドは再び機能しました。再起動もおそらく機能します。 GNU binutilsに移行する場合と同様です。

迷惑なことにロック解除ツールはファイルをロックしているプロセスを報告しません。Windowsでは.pdbを削除できませんが、名前を変更することはできます。私の推測では、ビルド中に2つのプロセスが同時にジャンプします。

0
jozxyqk

私は中間ディレクトリを次のように変更しました:

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

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

現在は機能しています。なぜだかわかりません。

0
Jeff McClintock

LinqToSqlを使用していますか?多分それは私がこの質問で尋ねたときに私が時々経験する奇妙なエラーに似ています: Visual Studioがアセンブリを正しくロードできない原因は何ですか?

0

同じ問題がありますC1033: cannot open program database

シナリオ

2つのdll parent.dllchild.dllがあります。parent.dllをビルドしようとしているときに、child.dllプロジェクトをビジュアルスタジオデバッガーにアタッチしましたプロジェクト、エラーC1033: cannot open program database

ソリューション

デバッグを停止し、デバッガーに関連付けられているプロセスを強制終了します。プロジェクトを再構築します。

0
CLIFFORD P Y