Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 请参见调用堆栈中的objc调用_Objective C - Fatal编程技术网

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

我正在调试Objective-C应用程序,希望看到ObjC库中的方法调用(出于教育目的!)。这样做的最佳方式是什么

// 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);
}