2012-03-06 33 views

回答

42

來自documentation

  • 啓用Scribble。用0xAA填充分配的內存並用0x55釋放內存。
  • 啓用防護邊緣。在大量分配之前和之後添加保護頁。
  • 啓用Guardoc Malloc。使用libgmalloc來捕獲常見的內存問題,例如緩衝區溢出和after-free-free。

Scribble會讓你很明顯的意識到,你在使用內存塊之後使用了一個內存塊,通過覆蓋任何原來在內存塊中的數據。
Guard邊緣和Guard Malloc將幫助您查找內存溢出和(在某種程度上)通過讀寫保護內存塊免費使用,以便在錯誤使用內存時使程序崩潰更爲明顯。

+0

我問這個,因爲有時我在崩潰我嘗試調試的應用程序,以及Xcode 4指向「int retVal = UIApplicationMain(argc,argv,nil,@」AppDelegate「); 」作爲錯誤的來源。所以我試圖想辦法讓它指向正確的錯誤線。 – SpaceDog 2012-03-06 20:51:04

+0

@DigitalRobot即使他們沒有給出100%的「保護」,如果它是內存錯誤,上面的任何選項都會被啓用,這使得程序更可能更接近實際錯誤所在的位置。 – 2012-03-06 20:57:41

+0

謝謝。這就是我正在尋找的! – SpaceDog 2012-03-06 22:02:41

3

上面的「文檔」鏈接一般是針對Xcode的,但更具體地,RN-MallocOptions涵蓋了這些(和其他)選項的詳細信息。

Jim Kubicek在Debugging Smashed Memory in Obj-C中展示了一個很好的例子,其中包括重要的「如何在Xcode中啓用它們?」問題:

打開「編輯方案」窗口並導航到「診斷」選項卡。你會打開「啓用Scribble」和「Malloc堆棧」。 ...簡而言之,「Enabled Scribble」將使分配器將0xAA寫入新分配的內存,並將0x55寫入釋放的內存。 「Malloc Stack」將記錄你的記憶的分配和自由歷史。

如果你已經讀到這裏,你可能有興趣在蘋果的技術說明: