iOS开发笔记之十四——Xcode 6.0.1下出现Thread 1: signal SIGPIPE问题的参考解决方案
来源:互联网 发布:域名过期 备案信息 编辑:程序博客网 时间:2024/05/16 09:44
1、问题描述
模拟器调试时,客户端切换到不同的开发站点,会导致应用程序进入一种无法离开的debug状态,打印堆栈结果如下:
(lldb) bt
* thread #1: tid = 0x30068, 0x07556f96 libsystem_platform.dylib`_platform_memcmp + 150, queue = 'com.apple.main-thread',stop reason = signal SIGPIPE
* frame #0: 0x07556f96 libsystem_platform.dylib`_platform_memcmp + 150
frame #1: 0x061616da CoreFoundation`__CFStringEqual + 394
frame #2: 0x061614ba CoreFoundation`CFEqual + 218
frame #3: 0x06178b2b CoreFoundation`-[__NSCFString isEqual:] + 283
frame #4: 0x0618e3ac CoreFoundation`-[__NSDictionaryM objectForKey:] + 156
frame #5: 0x0e506da8 CoreUI`-[CUIStructuredThemeStore renditionWithKey:] + 347
frame #6: 0x0e517eb9 CoreUI`-[CUINamedImage _renditionForSpecificKey:] + 194
frame #7: 0x0e517f05 CoreUI`-[CUINamedImage _rendition] + 46
frame #8: 0x0e517f2c CoreUI`-[CUINamedImage image] + 34
frame #9: 0x03ba29a2 UIKit`__98-[_UIAssetManager imageNamed:scale:idiom:subtype:cachingOptions:sizeClassPair:attachCatalogImage:]_block_invoke + 332
frame #10: 0x03ba27a5 UIKit`-[_UIAssetManager imageNamed:scale:idiom:subtype:cachingOptions:sizeClassPair:attachCatalogImage:] + 188
frame #11: 0x03cbdf83 UIKit`-[UIImageAsset imageWithTraitCollection:] + 595
frame #12: 0x035f5b35 UIKit`-[UIImageView _resolveImageForTrait:] + 308
frame #13: 0x035f59fa UIKit`-[UIImageView traitCollectionDidChange:] + 57
看原因可知,是由于SIGPIPE导致的。查阅下资料看下这个SIGPIPE到底是个什么东西。
2、问题原因:
在ios手机client请求到Server端试图建立TCP连接时,往往需要多次请求,中间会有失败的请求,所以服务器会经常去close一个连接,在TCP连接中,client会收到
一个RST响应。之前如果client已发出的数据,系统会发出SIGPIPE信号给client进程,告诉进程这个连接已经失效,不要再去写数据了。若根据默认规则,应用程
序进程会被terminate,client的进程会退出。根据测试的现象来看,IOS应用程序并没有直接退出,看来是做了SIGPIPE信号屏蔽处理,屏蔽处理让app收到SIGPIPE
信号之后不会crash。但是会在进行debug调试时触发debug中断,正如上述现象。
3、参考解决方案
要从根本上解决这个问题,需要服务端与客户端协同进行修改处理。但是在客户端别人提供了个临时解决的办法,就是在调试入口设置断点,让debug console进入
gdb或是lldb状态。我们IOS开发使用的是LLVM,所以使用process handle SIGPIPE -s false。
gdb
handle SIGPIPE nostop
lldb
process handle SIGPIPE -s false
断点设置如下:
之后形成断点如下:
4、参考资料
http://antbruce10.blog.163.com/blog/static/21541111720140844435786/
http://blog.chinaunix.net/uid-9435177-id-2002671.html
http://blog.csdn.net/onlyou930/article/details/16116553
http://blog.csdn.net/sever2012/article/details/8281163
- iOS开发笔记之十四——Xcode 6.0.1下出现Thread 1: signal SIGPIPE问题的参考解决方案
- iOS开发笔记之五——Xcode 6.0 Beta编译工程时可能遇到的问题及参考解决方案
- Xcode 中编译出现 thread 1 breakpoint 1.1 的解决方案
- iOS开发笔记之二十四——Xcode下类中供外部调用的方法添加注释说明技巧
- IOS开发——Xcode调试SIGPIPE信号解决办法
- iOS开发笔记之四十七——多线程场景下的KVO使用参考方案
- android开发录音时出现Fatal signal 11 (SIGSEGV) at 0x00000010 (code=1), thread 16909 (umu.mediarecord)的解决方案
- iOS开发,运行时错误:thread 1: signal sigabrt
- iOS开发,运行时错误:thread 1: signal sigabrt
- signal(SIGPIPE,SIG_IGN)问题
- signal(SIGPIPE,SIG_IGN)问题
- Xcode and iOS Simulator issue report: got 'Thread 1: Signal SIGABRT' for single view application
- iOS 忽略SIGPIPE的问题
- iOS开发socket程序被SIGPIPE信号Terminate的问题
- iOS开发socket程序被SIGPIPE信号Terminate的问题
- 如何在 iOS 上避免 SIGPIPE 信号导致的 crash (Avoiding SIGPIPE signal crash in iOS)
- iOS开发笔记之三十五——一种让Xcode报错更加精准的方法
- iOS开发笔记之四十六——常用的MAC以及Xcode操作快捷键
- sysconf()、pathconf()和fpathconf()函数
- 苹果进入健康领域,将如何面对隐私问题?
- 读取数据库并生成excel文件--PHPExcel
- 几个不错的深度学习教程
- JLINK、ULINK及ST-LINK
- iOS开发笔记之十四——Xcode 6.0.1下出现Thread 1: signal SIGPIPE问题的参考解决方案
- 数据挖掘10大算法的思维导图
- CXF学习-形参、返回值为javaBean,list或数组
- 解决Bootstrap.用户界面架构视频中的popover鼠标滑过无法弹出提示框
- getHibernateTemplate调用存储过程
- 竟然有速度就让她身体任何他人生
- 查看linux服务器硬盘IO访问负荷的方法总结
- 启动tomcat后访问页面http://localhost:8080/报错
- dom4j解析xml