libsystem_kernel.dylib`mach_msg_trap:
来源:互联网 发布:中国网络作家协会主席 编辑:程序博客网 时间:2024/04/29 09:34
stop reason = signal SIGPIPE
问题描述
模拟器或者真机调试时,客户端切换到不同的开发站点或者链接不上socket,会导致应用程序进入一种无法离开的debug状态
libsystem_kernel.dylib`mach_msg_trap:
0x210ce8bc <+0>: mov r12, sp
0x210ce8c0 <+4>: push {r4, r5, r6, r8}
0x210ce8c4 <+8>: ldm r12, {r4, r5, r6}
0x210ce8c8 <+12>: mvn r12, #30
0x210ce8cc <+16>: svc #0x80
-> 0x210ce8d0 <+20>: pop {r4, r5, r6, r8}
0x210ce8d4 <+24>: bx lr
(lldb) bt
* thread #1: tid = 0x7ec58, 0x210ce8d0 libsystem_kernel.dylib`mach_msg_trap + 20, queue = 'com.apple.main-thread', stop reason = signal SIGPIPE
* frame #0: 0x210ce8d0 libsystem_kernel.dylib`mach_msg_trap + 20
frame #1: 0x210ce6d4 libsystem_kernel.dylib`mach_msg + 40
frame #2: 0x21419ac4 CoreFoundation`__CFRunLoopServiceMachPort + 136
frame #3: 0x21417e4c CoreFoundation`__CFRunLoopRun + 1036
frame #4: 0x21367228 CoreFoundation`CFRunLoopRunSpecific + 520
frame #5: 0x21367014 CoreFoundation`CFRunLoopRunInMode + 108
frame #6: 0x22957ac8 GraphicsServices`GSEventRunModal + 160
frame #7: 0x25a3b188 UIKit`UIApplicationMain + 144
frame #8: 0x000c5f00 InfowarelabIOSClient`main(argc=1, argv=0x01b72a5c) + 164 at main.m:17
frame #9: 0x2100f872 libdyld.dylib`start + 2
问题原因:
在iOS手机client请求到Server端试图建立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
断点设置如下:
之后形成断点如下:
转自:http://blog.csdn.net/lizitao/article/details/39476845
- libsystem_kernel.dylib`mach_msg_trap:
- iOS 10 系统的崩溃libsystem_kernel.dylib`__abort_with_payload:
- 使用IOS 10 / XCODE 8.1 遇到 libsystem_kernel.dylib`__abort_with_payload问题的解决方法
- xcode开发:mach_msg_trap异常处理
- 上传文件出现Mach_msg_trap错误之解决
- iOS异常处理 :Mach_msg_trap异常求解
- make-dylib
- .dylib文件扩展名,.dylib文件如何打开?
- libsqlite3.dylib与libsqlite3.0.dylib区别
- libsqlite3.dylib与libsqlite3.0.dylib区别
- libsqlite3.0.dylib和libsqlite3.dylib
- libsqlite3.dylib与libsqlite3.0.dylib区别
- libsqlite3.dylib与libsqlite3.0.dylib区别
- libsqlite3.dylib与libsqlite3.0.dylib区别
- otool 与dylib
- iphone dylib program
- otool 与dylib
- [libsqlite3.dylib]相关
- Navigator对象
- gulpfile.js自动化解决js、css缓存问题(添加版本号)
- 欢迎使用CSDN-markdown编辑器
- eclipse项目前出现红色感叹号
- Schedule Problem (HDU 1534 差分约束+SPFA)
- libsystem_kernel.dylib`mach_msg_trap:
- shell排序算法
- Lambda表达式与表达式树
- HDU-1157-Who's in the Middle
- Java list.remove( )方法需要注意的两个地方
- es 性能优化 建议 2
- DS:三角矩阵
- 解决Eclipse里找不到courier new字体选项
- 软件研制任务书