3
我創建了一些示例代碼來演示我的問題。iOS - 在調用dispatch_async時沒有堆棧跟蹤
- (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)
我不是100%,但我認爲這是面對異常正在引發(「索引超出界限」),在主線程中被捕獲。您的處理程序()塊正在另一個線程上調用,因此捕獲的堆棧跟蹤對您沒有多大用處。當你只是調用處理程序()我是在主線程,所以沒有問題。至於解決方案,我會盡快回復你! –
你可以將代碼包裝在 –
謝謝,但是當它試圖給我的方法塊被調用但沒有告訴我行號。它只是說0 IOSTestApp 0x0003428d __56- [DetailController tableView:cellForRowAtIndexPath:] _ block_invoke + 173 – SukyaMaki