iOS-调用dispatch\u async时没有堆栈跟踪
我创建了一些示例代码来演示我的问题iOS-调用dispatch\u async时没有堆栈跟踪,ios,objective-c,objective-c-blocks,gcdasyncsocket,Ios,Objective C,Objective C Blocks,Gcdasyncsocket,我创建了一些示例代码来演示我的问题 - (void) test { void (^handler)(void) = ^ { NSArray *test = [NSArray array]; [test objectAtIndex: 5]; }; handler = [handler copy]; dispatch_async(dispatch_get_main_queue(), handler); } 当我调用测试方法时
- (void) test {
void (^handler)(void) = ^ {
NSArray *test = [NSArray array];
[test objectAtIndex: 5];
};
handler = [handler copy];
dispatch_async(dispatch_get_main_queue(), handler);
}
当我调用测试方法时,我没有得到堆栈跟踪。调试器仅在main.m处停止,并突出显示此行
int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([FantasyUniversalAppDelegate class]));
如果我删除dispatch_async并只调用handler();然后我得到了一个堆栈跟踪。有人能解释为什么会这样吗?有没有办法获得更具描述性的堆栈跟踪
现在我正在使用Flurry向我显示崩溃,但是它向我显示的崩溃不是很有用,因为我得到了一个非常非描述性的堆栈跟踪(用符号表示)。看起来是这样的:
Thread: Unknown Name
0 libsystem_kernel.dylib 0x3a224eb4 mach_msg_trap + 20
1 CoreFoundation 0x32067045 __CFRunLoopServiceMachPort + 129
2 CoreFoundation 0x32065d5f __CFRunLoopRun + 815
3 CoreFoundation 0x31fd8ebd CFRunLoopRunSpecific + 357
4 CoreFoundation 0x31fd8d49 CFRunLoopRunInMode + 105
5 GraphicsServices 0x35b9c2eb GSEventRunModal + 75
6 UIKit 0x33eee301 UIApplicationMain + 1121
7 IOSTestApp 0x00025d7b main (main.m:14)
您可以将代码包装在
@try {
NSArray *test = [NSArray array];
[test objectAtIndex: 5];
}
@catch {
// Get the stack track for the current thread
NSArray *stacktrace = [NSThread callStackSymbols];
// Do something with the symbols
}
所有在您正在调度的块内。虽然我相信还有更好的方法 我不是100%,但我相信这与异常被提出(“索引越界”)的情况有关,它被捕获在主线程上。正在对备用线程调用handler()块,因此捕获的堆栈跟踪对您没有多大用处。当您只调用handler()时,我在主线程上,所以没有问题。至于解决办法,我会给你回电的!你可以用aThanks包装你的代码,但是当你尝试这样做的时候,它给了我调用块的方法,但是没有告诉我行号。它只是说0 IOSTestApp 0x0003428d _56-[DetailController tableView:CellForRowatineXpath:][u block_invoke+173抱歉,这是您尝试在其周围放置try/catch时发生的情况?您是否尝试添加异常断点,如以下回答所示: