2011-04-26 36 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