gpt4 book ai didi

使用 GCD 时在某些设备上崩溃

转载 作者:行者123 更新时间:2023-12-03 17:40:58 28 4
gpt4 key购买 nike

我有一个在一些设备上崩溃的 iOS 应用程序。鉴于发生这种情况时我在 iTunes 上看到的差评,崩溃似乎发生在代码中的同一点。

最后,一位好心人实际上联系了我,而不仅仅是留下评论,他们甚至为我安装了使用 TestFlight 的应用程序的调试版本。

有了崩溃报告,我可以看到它发生在 malloc 深处的某个地方:

2 libSystem.B.dylib 0x34683d6e _sigtramp + 42
3 libSystem.B.dylib 0x3468c886 szone_malloc_should_clear + 2122

而且,给定行号,它似乎发生在我开始后台任务的时候:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
UIImage *image = [self loadImage:path];
dispatch_sync(dispatch_get_main_queue(), ^{

我不确定崩溃发生在这 3 行中的哪一行,因此不清楚崩溃是在调用 GCD 本身时发生的,还是在 block 代码的开头,还是在 block 本身的某个地方。

堆栈跟踪最终出现在包含上面代码片段的函数中,而不是看起来在 block 本身中。如果崩溃发生在异步 block 中,堆栈跟踪是否仍会包含对父函数的调用树?我目前正在假设 block 内崩溃的堆栈跟踪不包括对父函数的调用(因为 block 在其自己的线程中异步执行),所以我认为是对 GCD 的调用崩溃了.

我尝试使用 TFLog 来查找失败的确切时刻,但根本没有记录日志。我知道日志调用是正确完成的,因为在我的开发设备上我看到日志在 TestFlight 记录器中弹出,所以看起来崩溃正在扰乱这个调试选项。

最后,TestFlight 找不到该用户使用的 iPhone 4 的 iOS 版本号 - 所以我想知道这是否是越狱设备,是否可能会产生影响? (我已经问过用户,还没有答案)。

请注意,这都是 ARC 代码,所以我会很惊讶地发现这是一个内存管理问题。它也与一些设备隔离,但这些设备每次都在同一点崩溃。

任何人都可以提供任何见解或调试建议(鉴于我自己没有崩溃设备)。

谢谢,

蒂姆

最佳答案

我已经解决了这个可怕的错误。

事实证明,DISPATCH_QUEUE_PRIORITY_BACKGROUND 仅在 5.0 或更高版本上可用,并且会在以前的版本上崩溃。

我实际上已经在运行 4.2.1 的 iPhone 3G 上测试了该应用程序,但由于该模型根本不支持 GCD,因此没有运行特定的代码路径......

关于使用 GCD 时在某些设备上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9512701/

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