2012-12-07 47 views
1

我真的迷失在這裏。也許你們中的一些人可以指點我一個正確的方向。從DOS的Segfaults,但從GDB運行

我正在開發一個使用GCC而不是MinGW的ANSI C工具。該工具只能從命令行運行。可能只有在Windows機器上。它在本地闡述一些數據並生成供其他程序使用的文件。基本上它做了很多數學和一些文件處理。沒有什麼真的想象。我沒有發現它有必要在這裏發佈整個1000多行用於檢查...

我使用GCC -ansi進行編譯,確保連一個警告都不存在。隨着發展的發展,一切都運轉良好。但最近我開始(幾乎)隨機的段錯誤。我檢查了最後所做的更改,但沒有發現任何內容。我刪除了最後的變化,完全回到完美的工作狀態。仍然段錯誤。我逐行追溯。我回去閱讀並重新閱讀了搜索可能的指針/ malloc錯誤的整個代碼。我根本無法找到它經常失敗的原因,也是隨機的。

所以這裏是奇怪的事情 - 我用-g編譯它並運行GDB。

開始MSYS 變化dir其中的程序駐留 $ GDB generatore.exe(一-g編譯在DOS失敗) $運行

而且它完美的作品裏面GDB。我一步一步地走。逐行。完善。我試圖用大量的數據強調它。所有作品。無法重現錯誤。但是,如果相同的可執行文件通過DOS運行,則會失敗。

我懷疑某些指針有不可預知的行爲,但我無法在任何地方找到它。

有沒有人遇到類似的東西?我應該在哪裏檢查?另外,我對GDB並不熟悉,因爲它運行平穩,我能否以某種方式強制執行該控制以在DOS中找到原因而失敗?有沒有其他免費的Windows調試解決方案可以告訴我?我如何調試不可預知的行爲?

非常感謝您的關注, 格言

回答

0

有一個偉大的自由工具,捕捉所有種類的運行時錯誤的指針,內存分配,釋放操作等做的,它不能在編譯時被捕獲,所以你的編譯器不會警告你:valgrind http://valgrind.org/。問題是,AFAIK它不能在Windows上運行。但是,如果你的程序是純粹的ANSI C,你應該可以在Linux上使用valgrind來構建它並運行它。

我不是100%確定的,但它應該在虛擬機上運行正常,所以如果你沒有單獨的Linux計算機,你可以嘗試安裝例如在Virtual Box或VmWare中運行Ubuntu,並嘗試使用valgrind在其中運行程序。

+0

謝謝piokuc。我已經讀過關於valgrind是一個很棒的工具,但是我需要一點時間在這裏設置一個linux環境。絕對是我的下一步。非常感謝。 – MAXIM

+0

@ user1885558我知道,安裝Linux看起來要花很多功夫,但這是值得的,有一個很好。您不會後悔:) – piokuc

+0

獲得亞馬遜AWS賬戶,我運行Valgrind。發現〜40mb的泄漏內存...修正了這個問題。現在在兩個系統上穩定。我一遍又一遍地認識到,如果沒有Linux,你就無處可去。謝謝,piokuc! – MAXIM

相關問題