2011-12-21 70 views
3

在C++ MSVS2008中工作時,我一直有越來越多惱人的問題:在錯誤的行上執行斷點,而不是捕獲等等。這是一個非常大的工作空間,有數千個文件,所以我「忍受它」。C++ MSVS,我應該做什麼文件「清理」? (cl error:D8037)

我通過「標準」的東西去(乾淨的,「深」乾淨,手動刪除*.idb*.pdb*il*等),它沒有固定的「斷裂點上錯行」的問題,而是事至少編譯過,我可以運行/調試。

然後,(對於不相關的原因),我創建了一個發行編譯一個-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,大約有一年。

我從來沒有聽說過這些文件(「臨時編譯器文件」)。搜索微軟站點顯示這個錯誤是可能的至少 MSVS 2005,2008,2010。作爲「臨時」文件,我假設有某種「清理」或「回收」算法?

  • 有多少個_CL_hhhhhhhh.ss文件是限制? (我在一個條件下有這個錯誤6,063)。

  • 爲什麼我在EXE中執行「compile」而不是從MSVS IDE中看到這個錯誤? (當我直接從命令行執行「編譯」時,我沒有看到這個錯誤)。

  • 我應該通過定期清理這些文件來在開發機器上「維護」嗎?

  • 還有什麼其他的「cruft」文件需要考慮查找和刪除?

順便說一句,我知道,MSVS項目的GUID在註冊表緩存,使IDE可以「找到」被手動移動,以「修復」鏈接/依賴與其他項目的項目文件文件。如果有人有任何建議,我想知道如何清理這些。 「

This does導致最終問題」在開發機器上使用MSVS會累積什麼樣的隱藏信息?「

的Win7/64,C++ MSVS 2008年,NTFS

+0

這些文件的存在是否對您造成問題?你想解決什麼問題?沒有特別的理由關心臨時目錄中的文件,除非您的磁盤空間非常低。 – 2011-12-21 09:30:54

+0

@Cody,我有足夠的磁盤空間,但我無法編譯文件內部的EXE(CL錯誤'D8037') – charley 2011-12-21 13:00:08

+0

@Cody,也證實:手動刪除這些文件後,重建,我的斷點是在正確的路線上(我一直試圖解決這個問題)。 – charley 2011-12-21 13:13:45

回答

1

我不知道,如果你有問題的特定文件是相當大(大於10000行),但我有同樣的問題在MSVS2008的這種情況下,斷點多次出現在錯誤的線路上。爲我工作的解決方案(並提高了代碼的可讀性)是將一些函數邏輯地分組到一個類/名稱空間中,並將它們放入一個新文件中。

1

cl.exe when launched via CreateProcess does not seem to have write permissions解決您的第二個問題。爲什麼只有在exe內部啓動時才能看到它?

這很可能是cl.exe在別處失敗。如果你使用進程監視器,它會給你一個關於cl.exe所做的所有系統調用和失敗的好主意。

在我的情況下,當調用CreateProcess時,我重寫了環境變量,並在該過程中最終重置了SystemRoot環境變量。 cl.exe使用它來解析某些系統DLL的路徑,因此永遠不會找到該DLL。

短期修復是將「SystemRoot = c:\ windows」添加到我傳入CreateProcess的環境設置中。

正確的長期解決方法是獲取環境變量,解析它們並只根據需要修改/追加並將整個環境變量塊傳遞給CreateProcess。這樣,通過CreateProcess啓動的cl.exe會繼承您的exe啓動時使用的環境變量。