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时发生的情况?您是否尝试添加异常断点,如以下回答所示: