Cocoa XCode的一些除錯技巧

2022-05-08 08:15:09 字數 3116 閱讀 6428

xcode的一些除錯技巧

羅朝輝 (

本文遵循「署名-非商業用途-保持一致」創作公用協議

po 命令:為 print object 的縮寫,顯示物件的文字描述(顯示從物件的 description 訊息獲得的字串資訊)。

比如:

上圖中,我使用 po 命令顯示乙個 nsdictionary 的內容。注意在左側我們可以看到 dict 的一些資訊:3 key/value pairs,顯示該 dict 包含的資料量,而展開的資訊顯示 isa 層次體系(即class 和 metaclass結構關係)。我們可以右擊左側的 dict,選中「print description of "dict"」,則可以在控制台輸出 dict 的詳細資訊:

printing description of dict:

0x1001149e0 [0x7fff7e27ff40]> = 0x100002438 [0x7fff7e27ff40]>

1 : 0x100002498 [0x7fff7e27ff40]> = 0x100002478 [0x7fff7e27ff40]>

2 : 0x1000024d8 [0x7fff7e27ff40]> = 0x1000024b8 [0x7fff7e27ff40]>

}(gdb)

print 命令:有點類似於格式化輸出,可以輸出物件的不同資訊:如:

(gdb) print (char *)[[dict description] cstringusingencoding:4]

$1 = 0x1001159c0""

(gdb) print (int)[dict retaincount]

$2 = 1

(gdb)

注:4是 nsutf8stringencoding 的值。

(gdb) info symbol 0x00000001000017f7

main + 343

in section lc_segment.__text.__text of /users/luozhaohui/library/developer/xcode/deriveddata/runtimesystem-anzdlhiwvlbizpfureuvenvmatnp/build/products/debug/runtimesystem

(gdb) info line *0x00000001000017f7

line 62 of "

/users/luozhaohui/documents/study/runtimesystem/runtimesystem/main.m

" starts at address 0x1000017f7

343> and ends at 0x10000180a

362>.

show copying

" to see the conditions.

there is absolutely no warranty for gdb. type "

show warranty

"for details.

this gdb was configured as"".

help 命令:如果忘記某條命令的語法了,可以使用 help 命令名 來獲取幫助資訊。如:help info 顯示 info 命令的用法。

(gdb) help info

generic command for showing things about the program being debugged.

list of info subcommands:

info address -- describe where symbol sym is stored

info all-registers -- list of all registers and their contents

info args -- argument variables of current stack frame

info auxv -- display the inferior'

s auxiliary vector

info breakpoints -- status of user-settable breakpoints

info catch -- exceptions that can be caught in the current stack frame

info checkpoints -- help

info classes -- all objective-c classes

......

type "

help info

" followed by info subcommand name for full documentation.

command name abbreviations are allowed if unambiguous.

(gdb)

在系統丟擲異常處設定斷點有時候我們的程式不知道跑到哪個地方就 crash 了,而 crash 又很難重現。保守的做法是在系統丟擲異常之前設定斷點,具體來說是在 objc_exception_throw處設定斷點。設定步驟為:首先在 xcode 按 cmd + 6,進入斷點管理視窗;然後點選右下方的 +,增加新的 symbolic breakpoint,在 symbol 一欄輸入:objc_exception_throw,然後點選 done,完成。 這樣在 debug 模式下,如果程式即將丟擲異常,就能在丟擲異常處中斷了。比如在前面的**中,我讓 [firstobjctcrashtest]; 丟擲異常。在 objc_exception_throw 處設定斷點之後,程式就能在該**處中斷了,我們從而知道**在什麼地方出問題了。

gdb除錯的一些技巧

雖然list已經很方便了,但還是不盡人意.如果能夠在執行的同時顯示 就好了,答案是肯定的.使用如下命令啟動gdb gdb tui main或者在啟動gdb後,輸入命令focus或layout linux下,程式出現崩潰都會在可執行檔案的目錄生成core檔案,此時可以使用core檔案檢視崩潰時的呼叫堆...

一些除錯軟體的使用

1 gdb的使用,別人的帖子寫的不錯,直接貼鏈結吧,有空了自己再重寫。gdb常用命令 主要講了常用的gdb命令,對幾個易混和重要的自己記錄一下。r 執行程式,直到斷點 s與n的區別 s遇到函式會跳到函式中,繼續在函式中單步,而n則直接呼叫函式,把呼叫函式看成一步。clear 的行號指示的斷點,del...

除錯觸屏的一些積累

原文 最近在做一些除錯觸屏的工作,經過一段時間的接觸,碰到了一些問題,隨手記下。電容屏的的驅動,常見的問題是 1.虛擬按鍵的敏感區域不正確 比如觸碰虛擬按鍵的圖示,按鍵無反應,但是觸碰按鍵圖示的右上角,按鍵的反應卻正常。2.在觸屏測試時,畫的線不圓滑,有的折線很明顯 觸屏的互動方式有種叫做握手模式,...