在XCode中设置忽略signal SIGPIPE错误

一、在工作中遇到的问题

当我利用XCode中的Instrument对我的app做自动化测试的时候,有时候会发生app的crash,这种crash的原因是signal SIGPIPE错误。这种错误就能够引起APP的Crash.

二、探究问题的原因

在app请求Service端视图建立TCP连接时,往往需要多次请求,中间会有失败的请求。所以服务器会经常去close一个连接,在TCP连接中,client会受到一个RST响应。之前如果client已发出数据,系统会发出SIGPIPE信号给client进程,告诉进程这个连接已经失效,不要再去写数据了。若根据默认规则,应用程序进程会被terminate,client的进程会退出。根据测试的现象来看,IOS应用程序并没有直接退出,而是是做了SIGPIPE信号屏蔽处理,屏蔽处理让app收到SIGPIPE信号之后不会crash。但是会在进行debug调试时触发debug中断,正如上述现象。

三、解决方法

要从根本上解决这个问题,需要服务端与客户端协同进行修改处理。但是在客户端别人提供了个临时解决的办法,就是在调试入口设置断点,让debug console进入
gdb或是lldb状态。我们IOS开发使用的是LLVM,所以使用process handle SIGPIPE -s false。

gdb
handle SIGPIPE nostop
lldb
process handle SIGPIPE -s false

如图所示:
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值