ios – Xcode不会跨越崩溃

ios – Xcode不会跨越崩溃,第1张

概述因此,在许多不同的项目中已经发生过多次这种情况.当 Xcode出现错误时,我将在 Xcode中调试我的应用程序.看了之后,我点击了Step Over或Continue ……它什么也没做.更确切地说,它的行为就像它踩到了,但实际上并没有去任何地方.据我所知,这可以无限期重复.这有问题的一个原因是它永远不会给我崩溃日志,因为它永远不会崩溃.我只在应用程序崩溃并且没有被调试时获得崩溃日志(这意味着我必须 因此,在许多不同的项目中已经发生过多次这种情况.当 Xcode出现错误时,我将在 Xcode中调试我的应用程序.看了之后,我点击了Step Over或Continue ……它什么也没做.更确切地说,它的行为就像它踩到了,但实际上并没有去任何地方.据我所知,这可以无限期重复.这有问题的一个原因是它永远不会给我崩溃日志,因为它永远不会崩溃.我只在应用程序崩溃并且没有被调试时获得崩溃日志(这意味着我必须通过Crittercism或检查设备日志).

以前有人看过这个,并且/或者知道它为什么会这样做?我在其他地方没有看到任何提及,但在几个项目中我发生了这件事.

例如,在一个项目中,我们使用SocketRocket,并且每隔一段时间(由于尚未知的原因)它在SRWebSocket.m中以下列方法崩溃:

- (voID)main;{    @autoreleasepool {        _runLoop = [NSRunLoop currentRunLoop];        dispatch_group_leave(_waitGroup);        NSTimer *timer = [[NSTimer alloc] initWithFireDate:[NSDate distantFuture] interval:0.0 target:nil selector:nil userInfo:nil repeats:NO];        [_runLoop addTimer:timer forMode:NSDefaultRunLoopMode];        int i = 0;        while ([_runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) {            NSLog(@"_runLoop %i %@",i++,[NSDate date]);        }        assert(NO);    }}

它在while行崩溃了. (顺便说一下,我添加了NSLog系列).当我点击“继续”或“跳过”时,线条指示灯会短暂闪烁,然后再次出现在同一条线上.请注意,它不会继续到NSLog行,也没有任何内容写入控制台.我目前仍然试图让它再次崩溃(这种特殊的崩溃是相当不可预测的),但如果我没记错的话,行指示符说EXC_BAD_ACCESS,可能是一个过早释放的对象.

解决方法 一个ObjC超出范围错误将导致抛出一个ObjC异常,如果未被捕获则会在中止时抛出异常.中止实际上只会引发BSD信号(SIGKILL).调试器很容易传递给进程,因此它可以自然地死掉.

EXC_BAD_ACCESS和EXC_BAD_INSTRUCTION是有趣的例外,因为它们首先进入OS的Mach端.为了正确传播,它们应该作为Mach异常本地处理,如果有一个处理程序,如果没有,它们应该传递给某个系统Handler,将它们转换为等效的BSD异常(SIGSEGV),然后传递给它BSD信号处理程序,最终将导致程序退出.

在调试器提供的内核接口中存在一个长期存在的错误,使得调试器无法从外部正确地实现这种小舞蹈.所以,如果你得到一个EXC_BAD_ACCESS,你就会陷入困境.在大多数情况下,这并不重要,你的程序只会转身并且无论如何都要死.通过观察它,你不会真正了解你的崩溃.

只有安装了SIGSEGV处理程序并希望调试它才有意义. MacOS X已经十年或更长时间了.幸运的是,实际上只有极少数人需要这样做……

总结

以上是内存溢出为你收集整理的ios – Xcode不会跨越崩溃全部内容,希望文章能够帮你解决ios – Xcode不会跨越崩溃所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1055604.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存