我正努力用GDB來調試我的Objective-C程序。我有一個我想調試的函數- (NSString *)reverse:(NSString *)someString
。Objective-C - 使用GDB打印方法參數
以下是我設置的斷點:
(gdb) break -[MyClass reverse:]
現在,當代碼到達斷點,我怎麼打印地址,甚至更好的self
值和方法參數?我做了一些谷歌搜索,並找到像po $rdx
這樣的建議,但沒有發現任何作品。
我該如何解決這個問題?
我正努力用GDB來調試我的Objective-C程序。我有一個我想調試的函數- (NSString *)reverse:(NSString *)someString
。Objective-C - 使用GDB打印方法參數
以下是我設置的斷點:
(gdb) break -[MyClass reverse:]
現在,當代碼到達斷點,我怎麼打印地址,甚至更好的self
值和方法參數?我做了一些谷歌搜索,並找到像po $rdx
這樣的建議,但沒有發現任何作品。
我該如何解決這個問題?
克拉克考克斯寫了這個我找到的最好的解釋。我一直提到這個頁面,並且已經制作了本地副本,以防萬一它消失。
http://www.clarkcox.com/blog/2009/02/04/inspecting-obj-c-parameters-in-gdb/
快速版本的64位x86和非浮點參數是:
first ObjC arg => $rdx
second ObjC arg => $rcx
third ObjC arg => $r8
fourth ObjC arg => $r9
記住,傳遞給方法的第一個兩件事情(在$ RDI和$ RSI)是self
和_cmd
。我不在這裏數。
如果您傳遞的是浮點數,結構數或四個以上的參數,事情會變得更加複雜,您應該閱讀AMD64 ABI第3.2.3節中的調用約定。如果您正在處理i386,PPC或ARM,請參閱Clark的文章,該文章涵蓋了那些適用於常見情況的案例。
在班級中實施description
方法。不管你喜歡什麼,你都可以格式化值。從文檔:
調試器的print-object命令間接調用此方法來產生對象的文本描述。
默認情況下'NSString'不提供'description'方法嗎? – ryyst
除非你的類是從NSString派生出來的,否則你得到的NSObject的默認實現並沒有太大的作用。你可以在調試器中做po自我。 – logancautrell
但是,如何打印方法參數('someString')? – ryyst
當使用gdb調試你可以用PO和打印()打印
po self
po someString
print (int) myInt
po
的作用就像NSLog(@"%@", self);
print()
的作用就像NSLog(@"%d", myInt);
*您可以打印多種類型的,如果你不是詮釋
在XCode中運行你的程序,你可以在Debug窗口中查看你的自己的對象,變量和範圍參數。 –
@MichaelDautermann:我不使用XCode。 – ryyst