iOS指南系列 如何解決奔潰問題 深入除錯

2021-06-09 05:19:05 字數 2528 閱讀 6838

**: 

分類: ios

2012-04-14 21:52

765人閱讀收藏 

舉報(lldb)po $eax

(unsigned int) $1 = 112518480 receiver () has no segue with identifier 'modalsegue'

一上來就看到這兩行東西,是不是覺得有點用,但又莫名其妙呢

與偵錯程式交朋友

****** friends with the debugger

對於最近的這個crash點,**如下:

[self performseguewithidentifier:

@"modalsegue" sender:sender];

在除錯窗格中沒有任何訊息。您可以像以前那樣,按繼續執行程式「按鈕,但你也可以在偵錯程式中鍵入乙個命令來得到錯誤資訊。這樣做的好處是可以留在同乙個地方暫停應用程式。

如果你執行這個模擬器,你可以(lldb)提示符後鍵入以下內容:

(lldb)po $eax
lldb is the default debugger for xcode 4.3 and up. 

如果你使用的是舊版本的xcode,那麼你有gdb偵錯程式(這對linux開發人員而言,很熟悉的)。他們採用同樣的一些基本的命令,所以,如果您的xcode提示說(gdb),而不是(lldb),你應該仍然能夠按照這個命令沒有問題。 (順便說一下,你可以切換在xcode編輯器之間的不同除錯,可以通過project schema編輯選項,選擇debugger,來個本地的圖更能說明問題:)

po命令代表「列印物件」 print object(會不會讓你想起.net clr debug中的 !do !pe=print exception)。符號$ eax是指cpu暫存器之一。在異常的情況下,該暫存器將包含乙個指標的n***ception物件。注:$eax只適用於模擬器,如果你在除錯裝置,你需要使用暫存器$ r0。

例如,如果鍵入:

(lldb)po[$eax class]
你也可以看到如下的輸出

(id)$2 = 0x01446e84 n***ception
數字並不重要,但很明顯,你在這裡處理與n***ception物件。

你可以呼叫這個物件的任何從n***ception方法。例如:

(lldb)po[$eax name]
這會給你異常的名稱,在這種情況下nsinvalidargumentexception,

(lldb)po[$eax reason]
這會給你 error message:

(unsigned int)$4 = 114784400 receiver(<mainviewcontroller: 0x6b60620>)has no

segue with identifier 'modalsegue'

note:when you just do 「po $eax」, it will call the 「description」 method on the object and print that, which in this case also gives you the error message.

這樣解釋這是怎麼回事:你試圖執行名為「modalsegue」的

segue ,但顯然在mainviewcontroller沒有segue公司。

storyboard並不表明segue公司是乙個存在,是你忘了設定其識別符號,這是乙個非典型的錯誤(往往是你拼寫錯了):

改變segue的識別符號「modalsegue。」再次執行程式, - 等待 - 點選按鈕。哇,這次沒有再的崩潰!但這裡是我們的下乙個部分問題 - 我們認為顯示表不應該是空的!

why?

譯者按慣例總結一下:

1. 適用storayboard後,要特別注意其中的設定

2. 了解gdb/lldb除錯命令真的是又幫助的(當然了解windows debugger也有幫助:))

這裡還有一些: 

如何解決藍屏問題

第一步 公升級筆記本bios 一般說來筆記本在出廠的時候很可能設計上存在某些的瑕疵,而廠商通常會採用公升級bios的方法來解決這些bug。如果我們在使用筆記本腦的過程中遇到了藍屏的情況,那麼我們可以採取公升級bios的辦法來解決藍屏的故障。第二步 正確安裝硬體驅動 在重新整理了bios以後,部分筆記...

如何解決fpga high fanout問題

fanout,即扇出,指模組直接呼叫的下級模組的個數,如果這個數值過大的話,在fpga直接表現為net delay較大,不利於時序收斂。因此,在寫 時應盡量避免高扇出的情況。但是,在某些特殊情況下,受到整體結構設計的需要或者無法修改 的限制,則需要通過其它優化手段解決高扇出帶來的問題。以下就介紹三個...

如何解決fpga high fanout問題

fanout,即扇出,指模組直接呼叫的下級模組的個數,如果這個數值過大的話,在fpga直接表現為net delay較大,不利於時序收斂。因此,在寫 時應盡量避免高扇出的情況。但是,在某些特殊情況下,受到整體結構設計的需要或者無法修改 的限制,則需要通過其它優化手段解決高扇出帶來的問題。以下就介紹三個...