2014-03-31 47 views
2

有時Xcode會遇到一個錯誤 - 但不是拋出一個正確的「程序結束」並給我一個描述,我得到的只是一個「已暫停」的視圖,就像我設置了斷點一樣。我所看到的只是一個巨大的堆棧跟蹤,我可以按下「執行程序」功能數百萬次,一次向前移動一行。它所做的一切都讓我感到挫敗,並磨損了我的墊板。Xcode中堆棧跟蹤的要點是什麼?

我想知道是否有任何方法可以使用此堆棧跟蹤,或者如果我可以將跟蹤轉移到「真實」問題,或從中提取人類可用的描述。

有時候,一個異常斷點有助於防止堆棧跟蹤,但通常我覺得調試器讓我失望。或者我錯過了一些東西,堆棧跟蹤實際上是否包含我可以用來顯示問題的信息?

+1

關鍵是要試着告訴你出了什麼問題。不幸的是,在像iOS這樣的多線程環境中,從堆棧跟蹤哪個線程以及哪個代碼有錯誤並不總是顯而易見的。嘗試從斷點檢查器設置「異常斷點」。您還應該在輸出控制檯窗口中收到一條消息,告訴您關於錯誤的一些線索。這裏是一個教程 - http://www.raywenderlich.com/28289/debugging-ios-apps-in-xcode-4-5和 – Paulw11

+0

是的,我喜歡他的例外斷點,他們有時會有幫助。感謝您的鏈接! –

回答

3

實際上,它確實停止在「真正」的問題,並暫停執行以存儲當前的操作狀態。即使作爲一個低級本科,我已經使用過很多次。

下面是一個例子:

#include <iostream> 

int main(){ 
    std::cout<<"This is not what you should do"<<std::endl; 
    int sum = 0; 
    int target = 6; 
    for(int i = target; i>=0;--i){ 
     sum += 1/i; 
    } 
    std::cout<<"we never see this but still it should give us a partial sum of the harmanic sequence "<<sum<<std::endl; 
} 

這將輸出的從1 1/N的總和爲目標,但它試圖做它從0開始。當它崩潰執行的暫停狀態可以很容易地看看有什麼不對。

如果你願意,你可以隨時通過點擊是想告訴你哪裏出了問題左上角

1

堆棧跟蹤顯示發生崩潰的位置(停止點)。這並不總是在你的代碼中,所以你可以把堆棧軌跡向下看到你的代碼實際被調用的地方,如果你幸運的話,你可以檢查函數和局部變量的參數值,希望給你足夠的上下文了解爲什麼發生這次事故。

我從來沒有能夠繼續,所以我的策略是試圖理解爲什麼我們在更全局的意義上墜毀(例如看看其他線程在做什麼)然後解決這個問題。

1

堆棧跟蹤停止鍵退出程序。 閱讀起來並不容易,特別是當它在應用程序的主要部分中斷時。 學習如何使用調試工具是一門藝術,這就是其中之一。 一個地方是文檔。 Apple的開發人員網站上有一些較舊的但大多數仍然相關的文章,涉及閱讀堆棧跟蹤和使用調試工具。 也有一些偉大的WWDC視頻關於這個話題非常值得你花時間。

一般情況下,如果你迷路了,看看它什麼時候發生。 這給你更多的線索。線索在哪裏放置斷點。 斷點幫助您隔離編譯但實際上不工作的代碼段。 然後,您可以遍歷斷點,直到出現大的錯誤堆棧跟蹤。這通常會有所幫助。 您也可以使用「caveman調試」並開始用NSLog調用來處理代碼,以幫助以類似的方式進行隔離。

除此之外,你會想要那些WWDC視頻。 你會發現許多技術工具,你希望不經常需要。

堆棧跟蹤將開始變得更有意義,但除非您做了很多工作,並且在編譯器上工作,否則您可能永遠無法理解所有內容。