2011-12-21 6 views
3

C++での作業MSVS2008、私はますます面倒な問題を抱えてきました。間違った行で実行されていて捕捉されていないブレークポイントなど。数千ものファイルを持つ非常に大きなワークスペースなので、それ"。C++ MSVS、どのファイル "クリーンアップ"をやっていますか? (clエラー:D8037)

私は「標準」のものそれは、「ブレークポイントオン間違ったオンライン」問題を解決しませんでした(手動*.idb*.pdb*il*などを削除し、「深い」クリーン、クリーン)が、物事を経て少なくともコンパイルされ、私は実行/デバッグすることができます。 THEN

、(無関係な理由のために)、私はコンパイル1-CPP-に-OBJコマンドを発行したコマンドラインプログラムを作成し、そして奇妙なエラーました:私は聞いたことがない

cl : Command line error D8037 : cannot create temporary il file; clean temp directory of old il files 

をえっ、

http://msdn.microsoft.com/en-us/library/bb385201(v=VS.90).aspx

オム:その前に、そのウェブ検索では、エラーの詳細をマイクロソフトのサイトに私を得ましたか。私のシステムではTMP dirには、明らかにたくさんのファイルがありました。_CL_hhhhhhhh.ss検索して、はい、私はちょうど約6,063これらのファイルのディレクトリに、約1年に戻っていた。

私はこれらのファイル( "一時コンパイラファイル")を聞いたことがありません。マイクロソフトのサイトを検索すると、以上で少なくとも MSVS 2005、2008、2010にこのエラーが発生することが示されています。「一時ファイル」なので、何らかの「クリーンアップ」または「リサイクル」アルゴリズムがあると思いますか?

  • _CL_hhhhhhhh.ssファイルの数はいくつですか? (私はこのエラーが6,​​063で発生しました)

  • MSVS IDEからではなく、EXEから "コンパイル"を実行すると、なぜこのエラーが表示されますか? (私はコマンドラインから直接 "コンパイル"を実行するとこのエラーは表示されません)。

  • これらのファイルを定期的にクリーンアップして開発マシン上でメンテナンスしてください。

  • 検索と削除について他にどのような "cruft"ファイルが必要ですか?

さておき、私はIDEを手動で他のプロジェクトとの「修理」のリンク/依存関係に動き回っているプロジェクトファイルを「見つける」ことができるようにMSVSプロジェクトのGUIDがレジストリにキャッシュされていることを承知しているとおりファイル。誰かに提案があれば、それらをきれいにする方法も知りたいです。この

は、の究極の質問にリードを行う「開発マシン上でMSVSを使用してから蓄積隠された嫌なものは何種類?」

Win7の/ 64、C++ MSVS 2008、NTFS

+0

これらのファイルの存在が問題になりますか?どのような問題を解決しようとしていますか?ディスク容量が非常に少ない場合を除き、一時ディレクトリー内のファイルに関係する特別な理由はありません。 –

+0

@Cody、私は十分なディスク容量を持っていますが、ex-exe(clエラー 'D8037')からファイルをコンパイルできません。 – charley

+0

@Cody、また確認済みです:これらのファイルを手動で削除して再構築した後、ブレークポイントは正しい行に(私は数日間それを修正しようとしてきた)。 – charley

答えて

1

は、私はあなたが問題を抱えた特定のファイルが(10,000行より大きい)かなり大規模だったが、私は同じ問題を持っていたかどうかわからないんだけどMSVS2008では、このような状況でブレークポイントが数回間違った行に表示されていました。私のために働いた(そしてコードの可読性を改善した)ソリューションは、いくつかの関数を論理的にクラス/名前空間にグループ化し、それらを新しいファイルに入れることでした。

1

cl.exe when launched via CreateProcess does not seem to have write permissionsは、2番目の質問に対処します。なぜあなたはexe内から起動されたときにそれを見るだけですか?

ほとんどの場合、cl.exeは他の場所で障害を起こしている可能性があります。 Process Monitorを使用すると、cl.exeが実行したすべてのシステムコールと何が失敗したかを知ることができます。

私の場合は、CreateProcessを呼び出すときに環境変数をオーバーライドしていましたが、そのプロセスでSystemRoot環境変数をリセットしました。 cl.exeはそれを使っていくつかのシステムDLLのパスを解決し、結果としてdllを見つけることができなくなりました。

短期的な修正は、私がCreateProcessに渡していた環境設定に "SystemRoot = c:\ windows"を追加することでした。

適切な長期的な修正は、環境変数を取得し、解析し、必要に応じて変更/追加し、その全体の環境変数ブロックをCreateProcessに渡します。こうすると、CreateProcessで起動したcl.exeは、exeで起動した環境変数を継承します。

関連する問題