2011-04-26 73 views
1

我正在調試Objective-C應用程序,並希望看到ObjC庫中的方法調用(用於教育目的!)。這樣做的最好方法是什麼?查看調用堆棧中的objc調用

+0

你的意思是你想看到方法的符號名稱? – JeremyP 2011-04-26 10:17:42

+0

是的 - 這是正確的 - 最好使用GDB從命令行 – 2011-04-26 10:18:38

+0

只需使用gdb中的'bt'命令。 – JeremyP 2011-04-26 10:22:22

回答

4
// print a stacktrace 
NSLog(@"%@", [NSThread callStackSymbols]); // requires iOS 4 

// print stacktrace using C functions 
#import <execinfo.h> 
#import <unistd.h> 
void PrintStackTrace() { 
    void *stackAdresses[32]; 
    int stackSize = backtrace(stackAdresses, 32); 
    backtrace_symbols_fd(stackAdresses, stackSize, STDOUT_FILENO); 
} 

或設置在XCode中斷點以暫停執行,然後鍵入GDB在控制檯命令或只是看在調試導航標籤堆棧。

+0

試過這個 - 但問題是我沒有看到堆棧跟蹤中的任何ObjC調用 – 2011-04-26 10:27:11

+0

如果您鍵入'call(void)instrumentObjcMessageSends(YES)',您會在'/ tmp/msgSends- ' 。爲了獲得更多的細節,你必須挖掘彙編器。標題這樣可能會有所幫助:http://developer.apple.com/library/mac/#technotes/tn2004/tn2124.html#SECSOMEASSEMBLY – Jano 2011-04-26 10:53:17

+0

有沒有辦法從bg線程獲取主線程調用堆棧? – 2012-08-09 06:21:42