美文网首页
signal SIGPIPE 引起的真机闪退问题解决

signal SIGPIPE 引起的真机闪退问题解决

作者: dvlproad | 来源:发表于2017-12-28 18:32 被阅读245次

前言

SIGPIPE
libsystem_kernel.dylib`mach_msg_trap:

SIGPIPE.png

在xcode开发中,有时会出现以下中断:

libsystem_kernel.dylib`mach_msg_trap:
    0x18b76d180 <+0>: mov    x16, #-0x1f
    0x18b76d184 <+4>: svc    #0x80
->  0x18b76d188 <+8>: ret    

[] nw_socket_get_input_frames recvmsg(fd 17, 1024 bytes): [57] Socket is not connected

这时候,点击继续运行按钮,app会继续运行,(-_-# 一开始我以为这是xcode的某种提示,实际运行可能不会有问题;然而实际情况是:因为此时是处于调试模式,所以不会闪退,但如果不是调试模式,而是release版,app就会crash异常退出)

搜索mach_msg_trap得到如下答案:

通过xcode的提示可以知道引起中断的原因是 signal SIGPIPE。
触发该消息的原因一般都是某fd已经释放,确依然对其write导致的。
我此处触发的原因是对方socket已关闭,继续写入导致。我是通过库函数
setsockopt(client_sock, SOL_SOCKET, SO_NOSIGPIPE, (void*)&set, sizeof(int))
忽略该消息从而解决问题。

问题描述:
在XCode中设置忽略signal SIGPIPE错误
如何解决ios SIGPIPE 导致的崩溃

问题分析:
避免SIGPIPE导致的iOS应用闪退/Avoiding SIGPIPE signal crash in iOS(mach_msg_trap、SIGPIPE信号)

问题解决:
iOS崩溃异常捕获(评论中有demo):这边文章的评论也记得顺便看下
[iOS]使用signal让app能够在从容崩溃

Signal 13 was raised

iOS应用收到Signal 13 was raised的崩溃信息,是什么引起的
Signal 13 was raised(SIGPIPE管道破裂)

Socket is not connected

Error: received error: [57] Socket is not connected - iOS 10

相关文章

网友评论

      本文标题:signal SIGPIPE 引起的真机闪退问题解决

      本文链接:https://www.haomeiwen.com/subject/okymgxtx.html