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はありません。
毎晩のコンパイルが不可能になるため、これは深刻な問題です。
書き込み時にアンチウイルスまたは同様のプログラムがpdbファイルに接触している可能性があります。このシナリオでは、アンチウイルスが最も疑われます。私のショップでナイトリービルドを設定した私の過去の経験に基づいて、私はあなたにいくつかの一般的な指針しか与えることができないと思います。これらのいくつかはささいなことのように聞こえるかもしれませんが、私は完成のためにそれらを含めています。
他に何も機能しない場合は、ビルド開始の数時間後にウォッチドッグスクリプトをスケジュールして、そのステータスを確認できます。ビルドが失敗した場合、ウォッチドッグは再起動する必要があります。これは醜いハックですが、何もしないよりはましです。
私のサイトでもこれをよく見ました。 この説明 、ピーターカウフマンから、私たちのセットアップに基づいて最ももっともらしいようです:
Visual Studio 2005でソリューションをビルドすると、致命的なエラーC1033:プログラムデータベース 'xxx\debug\vc80.pdb'を開けませんなどのエラーが発生します。ただし、2回目にビルドを実行すると、通常は成功します。
理由:ソリューションの2つのプロジェクトが同じディレクトリに出力を書き込んでいる可能性があります(例: 'xxx\debug')。 [ツール]-[オプション]、[プロジェクトとソリューション]-[ビルドと実行]の並列プロジェクトビルドの最大数が1より大きい値に設定されている場合、2つのコンパイラスレッドが同じファイルに同時にアクセスしようとして、ファイルが生成される可能性があります。紛争の共有。解決策:プロジェクトの設定を確認し、2つのプロジェクトが出力、ターゲット、またはあらゆる種類の中間ファイルに同じディレクトリを使用していないことを確認します。または、迅速な回避策として、並列プロジェクトビルドの最大数を1に設定します。 CLAPACKライブラリに付属しているVSプロジェクトファイルを使用しているときに、この非常に問題が発生しました。更新:ファイルがバージョン管理下にない場合でも、Tortoise SVNが「vc80.pdb」にアクセスする可能性があります。これにより、上記のエラーが発生する可能性もあります(これを報告してくれたLianaに感謝します)。ただし、すべてのプロジェクトで異なる出力ディレクトリが使用されていることを確認した後は問題を再現できなかったため、これを確認できません。
PDBを使用する代わりに、デバッグ情報をC7形式に切り替えます。
Project Options -> C/C++ -> General -> Debug Information Format
をC7
に設定します。
これは通常、前回のデバッグの試行でデバッガーが完全に終了しなかった場合に発生します。タスクマネージャーでvcjitと呼ばれるプロセスを探し、それを強制終了して再試行します。最悪のオプションはビジュアルスタジオを再起動します。これで問題が解決するはずです。
今日、この問題が発生しましたが、原因となったのは、pdbへのパスに含まれるANSI以外の文字でした。
私はVMwareを通じてWindowsを使用しており、プロジェクトは共有の場所にありました:\ vmware-Host\Shared Folders\project
\ Users\julian\projectに移動すると、問題は解決しました。
Dropboxフォルダーにあるプロジェクトで作業中に同様の問題が発生しました。 Dropboxがファイルにアクセスしてファイルをサーバーにアップロードしているため、システムトレイのDropboxアイコンに小さな「同期」アイコンが表示されると、このエラーがスローされることがわかりました。 Dropboxの同期が完了するまでビルドを待つと、毎回動作しました。
私はこの問題に遭遇しました。 Visual Studioは、開くことができないと不満を言っていましたvc100.pdb
。私はprocexp
を使用してこのファイルへのオープンファイルハンドルを探し、プロセスmspdbsrv
にオープンファイルハンドルがあることを発見しました。このプロセスを強制終了すると問題が解決し、コンパイルできました。
VSの実行可能ファイルを右クリックしてみてください。..および[プロパティ]-> [互換性]-> [このプログラムを互換モードで実行する:]にチェックマークを付けます。
これは私が一貫して私に起こります Ctrl+Break ビルドをキャンセルするには(vs2015)。正しくシャットダウンされないプロセスがあります。私は大暴れの "End Tasking" ms/vs関連プロセス(重複を探す)を行い、私のビルドは再び機能しました。再起動もおそらく機能します。 GNU binutilsに移行する場合と同様です。
迷惑なことにロック解除ツールはファイルをロックしているプロセスを報告しません。Windowsでは.pdb
を削除できませんが、名前を変更することはできます。私の推測では、ビルド中に2つのプロセスが同時にジャンプします。
私は中間ディレクトリを次のように変更しました:
%TEMP%\$(ProjectName)\$(Platform)\$(Configuration)\
に
C:\temp\$(ProjectName)\$(Platform)\$(Configuration)\
現在は機能しています。なぜだかわかりません。
LinqToSqlを使用していますか?多分それは私がこの質問で尋ねたときに私が時々経験する奇妙なエラーに似ています: Visual Studioがアセンブリを正しくロードできない原因は何ですか?
同じ問題がありますC1033: cannot open program database
、
シナリオ
2つのdll parent.dllとchild.dllがあります。parent.dllをビルドしようとしているときに、child.dllプロジェクトをビジュアルスタジオデバッガーにアタッチしましたプロジェクト、エラーC1033: cannot open program database
ソリューション
デバッグを停止し、デバッガーに関連付けられているプロセスを強制終了します。プロジェクトを再構築します。