2009-10-06 67 views
2

我遇到了我正在編寫的Cocoa應用程序的問題。它必須解析每小時更新一次的時間戳文件,並且在測試過程中,由於分段錯誤,它一直在晚上11:45左右崩潰。我假設我必須傳遞一個已被釋放的對象。 Xcode安裝提供了哪些工具來跟蹤對象分配,並且(希望)告訴我,我是否正在傳遞一個已被釋放的對象?如何追蹤Cocoa應用程序中的分段錯誤?

我使用的是Mac OS X 10.5。

回答

9

我想提出以下建議:

+4

不要一起做這些事情。 NSZombieEnabled將導致「泄漏」出現在樂器中。 – nall 2009-10-06 18:50:23

+0

+1:NSZombie對象是蘋果公司規定的方式來處理這樣的事情。就像nall說的那樣,不要使用啓用殭屍的儀器。 – 2009-10-06 19:17:28

0

我這樣做的方式是使用名爲gdb的命令行工具。 Here是如何使用它的教程。你必須學習一些它的命令,但一旦你做了它幾乎是一個愉快的使用。

注:gbd可用於C,C++和Objective-C程序。

0

你在gdb下運行程序嗎?這應該允許您在SIGSEGVs時檢查堆棧和變量。

要跟蹤分配,請使用malloc_history。這需要設置MallocStackLogging環境變量。

0

快速點:使用解除分配的內存位置通常會導致EXC_BAD_ACCESS異常。如果這是你看到的崩潰原因,那麼你認爲它是一個解除分配問題是正確的。

0

在Xcode的調試器(它是帶有頂層GUI的gdb)中運行它並重現崩潰。然後,看看堆棧跟蹤。

發送解除分配的對象通常具有objc_msgSend中的頂部幀。接下來的一步是使用NSZombieEnabled運行應用程序並重現崩潰;殭屍會識別自己。

+0

崩潰已經有點難以重現,但是我從崩潰日誌中知道故障發生在'objc_msgSend'中。 – mipadi 2009-10-07 18:33:08

+0

然後下一步是使用NSZombieEnabled來運行它。 – 2009-10-07 20:05:28