美文网首页
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