signal SIGPIPE 引起的真機(jī)閃退問題解決

前言

SIGPIPE
libsystem_kernel.dylib`mach_msg_trap:

SIGPIPE.png

在xcode開發(fā)中,有時(shí)會(huì)出現(xiàn)以下中斷:

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

這時(shí)候,點(diǎn)擊繼續(xù)運(yùn)行按鈕,app會(huì)繼續(xù)運(yùn)行,(-_-# 一開始我以為這是xcode的某種提示,實(shí)際運(yùn)行可能不會(huì)有問題;然而實(shí)際情況是:因?yàn)榇藭r(shí)是處于調(diào)試模式,所以不會(huì)閃退,但如果不是調(diào)試模式,而是release版,app就會(huì)crash異常退出)

搜索mach_msg_trap得到如下答案:

通過xcode的提示可以知道引起中斷的原因是 signal SIGPIPE。
觸發(fā)該消息的原因一般都是某fd已經(jīng)釋放,確依然對(duì)其write導(dǎo)致的。
我此處觸發(fā)的原因是對(duì)方socket已關(guān)閉,繼續(xù)寫入導(dǎo)致。我是通過庫(kù)函數(shù)
setsockopt(client_sock, SOL_SOCKET, SO_NOSIGPIPE, (void*)&set, sizeof(int))
忽略該消息從而解決問題。

問題描述:
在XCode中設(shè)置忽略signal SIGPIPE錯(cuò)誤
如何解決ios SIGPIPE 導(dǎo)致的崩潰

問題分析:
避免SIGPIPE導(dǎo)致的iOS應(yīng)用閃退/Avoiding SIGPIPE signal crash in iOS(mach_msg_trap、SIGPIPE信號(hào))

問題解決:
iOS崩潰異常捕獲(評(píng)論中有demo):這邊文章的評(píng)論也記得順便看下
[iOS]使用signal讓app能夠在從容崩潰

Signal 13 was raised

iOS應(yīng)用收到Signal 13 was raised的崩潰信息,是什么引起的
Signal 13 was raised(SIGPIPE管道破裂)

Socket is not connected

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容