我在使用STL,C++和Visual Studio時遇到了一個大問題。當我使用某些std或stl函數(在調試編譯時)有一些像這樣的錯誤"Incorrect format specifier"
。在STL中調試錯誤
但我的代碼太大,無法「手動搜索」此錯誤。也許一個知道如何得到一些幫助找到錯誤,有些像__FILE__
& __LINE__
斷言?因爲程序代碼太大。
或者try
& catch
我最後的希望?...
對於亞歷克斯
我在使用STL,C++和Visual Studio時遇到了一個大問題。當我使用某些std或stl函數(在調試編譯時)有一些像這樣的錯誤"Incorrect format specifier"
。在STL中調試錯誤
但我的代碼太大,無法「手動搜索」此錯誤。也許一個知道如何得到一些幫助找到錯誤,有些像__FILE__
& __LINE__
斷言?因爲程序代碼太大。
或者try
& catch
我最後的希望?...
對於亞歷克斯
既然你對STL的源代碼,我會做什麼在點設置一個斷點,其中「不正確的格式說明符「字符串位於。爲該字符串做一個grep(例如,在文件中查找),在每個斷點處設置斷點,運行程序並希望死亡。 :)
也許你可以在控制檯上做狀態信息,這樣你就可以知道錯誤發生的位置。您可以使用相同的技術在這部分進行更詳細的搜索。根據需要經常這樣做。
之後,您可以調試程序並在「問題區域」中設置斷點並逐步完成。
編輯:如果你能夠在Linux上編譯程序,你可以簡單地安裝並運行valgrind memcheck。它應該用行號打印出所有的錯誤。
你說的是try/catch,所以我認爲它拋出了一個異常。如果您在調試器中運行您的應用程序,是不是在拋出未捕獲異常的地方破壞了您的程序?
編輯:如果你可以在Linux/g ++上交替編譯,它會在這種情況下留下一個帶有回溯的核心。
附加的屏幕截圖清楚地表明您打了一個運行時斷言,甚至提供了直接進入dbugger的選項。這會帶你到錯誤的調用堆棧。
此消息是默認模式_CrtDbgReport
。使用_CrtSetReportHook2
,您可以在打印錯誤之前運行自己的代碼。例如,您可以創建一個小型轉儲。
錯誤信息應該指定與之相關的源文件和行號...... – 2010-11-30 22:04:13
@Oli:我認爲這個來自CRT,沒有文件/行信息。 – 2010-11-30 22:11:53
我不明白。編譯器是否提供了所有編譯錯誤的文件&行? – Puppy 2010-11-30 22:17:40