2013-04-03 94 views
0

我有一段長約600行的C++代碼,目前由於seg故障而不運行。我已經運行gdb,但它不是真的幫助我,因爲我不知道我在找什麼。我也運行了valgrind,我一直認爲它更有幫助,但我正在使用mac,而valgrind在mac上並不能正常工作(我在使用它時發出警告,我正在運行OSX 10.8)。我沒有Linux盒子,所以無法正常運行valgrind。有沒有人願意通過valgrind運行我的代碼來找到問題,或者有網站這樣做?我之所以問這裏的原因是因爲我找到了網站,但是因爲我使用的是gmp bignum庫,網站只是因爲他們沒有這個庫而引發關於庫不在那裏的錯誤。在Mac上使用valgrind

編輯:代碼是http://www.filedropper.com/tammesa7我不會發布它在這裏,因爲它是漫長而雜亂的!

+0

您是否嘗試過插入斷點以縮小錯誤發生的位置? – Boumbles

+1

一種選擇是安裝一個免費的虛擬機,如[VirtualBox](https://www.virtualbox.org/)。你可以乾淨地安裝任何其他操作系統,並使用可用的工具。 –

+0

@Boumbles是的,我有一個問題與mpf_urandomb()函數,但通過運行包含它自己的循環它自己運行良好,所以我很確定我明白它是如何工作的。當把它放到這個程序中,儘管我得到了seg故障... – adrem7

回答

3

一個選項是安裝一個免費的虛擬機,如VirtualBox

你可以乾淨地安裝任何其他操作系統,並使用可用的工具。

1

調試代碼有幾種方法。

  1. 在調試器中運行並使用「回溯」或「視圖堆棧」類型選項會告訴您它在哪裏崩潰。假設它確實崩潰。
  2. 添加日誌記錄。用printf("I'm in functon %s\n", __FUNCTION__);或類似的東西灑上代碼。打印變量值並與你所期望的相比較。
  3. 添加代碼以捕捉「不良行爲」。例如,檢查NULL指針,索引是否超出範圍,等等。
  4. 減少相關代碼。刪除函數 - 例如,使整個函數成爲註釋,或者在函數的頂部添加「返回」。如果問題消失,請撤消最後一項更改,並嘗試稍微減少一點,以查看會發生什麼情況。
  5. 減少輸入參數。如果您的代碼使用大型數據文件作爲輸入,請嘗試使用較小的數據文件。嘗試刪除某些數據 - 如果問題消失,那麼您知道它(可能)在其餘數據中。