Objective c 请参见调用堆栈中的objc调用
我正在调试Objective-C应用程序,希望看到ObjC库中的方法调用(出于教育目的!)。这样做的最佳方式是什么Objective c 请参见调用堆栈中的objc调用,objective-c,Objective C,我正在调试Objective-C应用程序,希望看到ObjC库中的方法调用(出于教育目的!)。这样做的最佳方式是什么 // print a stacktrace NSLog(@"%@", [NSThread callStackSymbols]); // requires iOS 4 或 //使用C函数打印stacktrace #进口 #进口 void PrintStackTrace(){ void*stackaddress[32]; int stackSize=回溯(stackAddresses
// print a stacktrace
NSLog(@"%@", [NSThread callStackSymbols]); // requires iOS 4
或
//使用C函数打印stacktrace
#进口
#进口
void PrintStackTrace(){
void*stackaddress[32];
int stackSize=回溯(stackAddresses,32);
回溯符号(堆栈地址、堆栈大小、标准文件号);
}
或者在XCode中设置一个断点以暂停执行,然后在控制台中键入GDB命令,或者只查看“调试导航器”选项卡中的堆栈
或
//使用C函数打印stacktrace
#进口
#进口
void PrintStackTrace(){
void*stackaddress[32];
int stackSize=回溯(stackAddresses,32);
回溯符号(堆栈地址、堆栈大小、标准文件号);
}
或者在XCode中设置一个断点以暂停执行,然后在控制台中键入GDB命令,或者只查看“调试导航器”选项卡中的堆栈。你的意思是想查看方法的符号名称吗?是的-没错-最好从命令行使用GDB只需在GDB中使用
bt
命令。似乎没有给我答案来自该库的符号在跟踪中看不到obj\u msg\u send()
,因为它通过尾部调用优化调用对象上的方法。它的堆栈帧实际上消失了。此外,库本身几乎肯定是剥离的,因此它不会有调试符号。你的意思是你想看到方法的符号名称吗?是的-没错-最好从命令行使用GDB只需在GDB中使用bt
命令。似乎没有给我该库中的符号你不会看到obj_msg_send()
,因为它通过尾部调用优化调用对象上的方法。它的堆栈帧实际上消失了。此外,库本身几乎肯定是剥离的,因此它不会有调试符号。尝试了这个方法-但问题是,如果键入call(void)instrumentObjcMessageSends(YES)
您在/tmp/msgSends-
中获得消息列表,我在堆栈跟踪中看不到任何ObjC调用。要获得更多细节,您必须深入研究汇编程序。这样的标题可能会有所帮助:有没有办法从bg线程获取主线程的调用堆栈?尝试过这个-但问题是,如果键入call(void)instrumentObjcMessageSends(YES)
您在/tmp/msgSends-
中获得消息列表,我在堆栈跟踪中看不到任何ObjC调用。要获得更多细节,您必须深入研究汇编程序。这样的标题可能会有所帮助:有没有办法从bg线程获取主线程的调用堆栈?
// 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);
}