gpt4 book ai didi

iOS - 调用 dispatch_async 时没有堆栈跟踪

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:41 25 4
gpt4 key购买 nike

我已经创建了一些示例代码来演示我的问题。

- (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
}

所有在您正在调度的 block 内。虽然我确信有更好的方法!

关于iOS - 调用 dispatch_async 时没有堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com