在Opwrt平台上测试ok的一个网络传输延时测试demo程序移植到Android平台后,运行出现莫名其妙的SIGSEGV crash。

仔细检查过源码,特别是指针等后未发现问题。

--------- beginning of crash
F/libc ( 1173): Fatal signal 11 (SIGSEGV), code 1, fault addr 0xb6d72c24 in tid 1174 (tcp_cli)
I/DEBUG ( 62): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 62): Build fingerprint: 'BUILD_FINGERPRINT'
I/DEBUG ( 62): Revision: '0'
I/DEBUG ( 62): ABI: 'arm'
I/DEBUG ( 62): pid: 1173, tid: 1174, name: tcp_cli >>> ./tcp_cli <<<
I/DEBUG ( 62): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xb6d72c24
I/DEBUG ( 62): r0 b6d82d3c r1 00000000 r2 00100000 r3 91902916
I/DEBUG ( 62): r4 b6f1fdd4 r5 b6f41a6c r6 00000003 r7 b6d82d3c
I/DEBUG ( 62): r8 b8e590e8 r9 b8e590e8 sl b6eda581 fp b6e82dd0
I/DEBUG ( 62): ip b6f43f7c sp b6d72c28 lr b6f40e45 pc b6ed6c00 cpsr 40070010
I/DEBUG ( 62):
I/DEBUG ( 62): backtrace:
I/DEBUG ( 62): #00 pc 00012c00 /system/lib/libc.so (memset)
I/DEBUG ( 62): #01 pc 00000e41 /dev/tcp_cli
I/DEBUG ( 62): #02 pc 000011e1 /dev/tcp_cli
I/DEBUG ( 62): #03 pc 0001659f /system/lib/libc.so (__pthread_start(void*)+30)
I/DEBUG ( 62): #04 pc 000144cb /system/lib/libc.so (__start_thread+6)
W/libbacktrace( 62): virtual bool BacktracePtrace::ReadWord(uintptr_t, word_t*): invalid pointer 0xb6d72be8 reading from tid 1174, ptrace() strerror(errno)=I/O error
W/libbacktrace( 62): virtual bool BacktracePtrace::ReadWord(uintptr_t, word_t*): invalid pointer 0xb6d72c28 reading from tid 1174, ptrace() strerror(errno)=I/O error
W/libbacktrace( 62): virtual bool BacktracePtrace::ReadWord(uintptr_t, word_t*): invalid pointer 0xb6d72c28 reading from tid 1174, ptrace() strerror(errno)=I/O error

从log上看是在创建线程后,线程启动,系统调用memset出现了错误,而不是用户调用memset导致。

使用addr2line工具查看对应的bin文件找到出错地址e41对应的源码所在如下:

 ./prebuilts/gcc/linux-x86/arm/arm-eabi-4.8/bin/arm-eabi-addr2line -e  out/target/product/rk3036/symbols/system/bin/tcp_cli e41
/home/liuxueneng/workCode/rk3036_dongle/external/lollipop_wifi/net/tcp_cli.c:71

找到对应源文件指定行71

  68
69 static int do_recv_handle(int sockfd)
70 {
71 char buf[BUFSIZE] = {0};
72 int numbytes = 0;
73 struct timeval timeout, recvtv, tv; 36
37 #define BUFSIZE (1 << 20)
38

很明显此处申请了一个1M的buf,但是受限于线程栈大小,所以每次运行到此处出现SIGSEGV错误而crash。

修改成128K后解决。

最新文章

  1. 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦
  2. java script 基础知识
  3. Python: 常用list, string处理功能
  4. [ay原创作品]用wpf写了个模仿36Kr网站登录背景的效果
  5. c# 实现串口编程-操作LED屏幕
  6. ORACLE 临时表空间清理
  7. php获取GET方式传入的全部变量名称与值:foreach用法
  8. js不能执行,IE处理方法
  9. 28 Corn表达式详解 (转自http://blog.csdn.net/claram/article/details/51785193)
  10. Objective-C priority queue
  11. dict和set的使用
  12. win8.1 usb3 速度慢的解决方法
  13. 页面优化,谈谈重绘(repaint)和回流(reflow)
  14. bootatrsp datetimepicker的初始化和阻止模态窗关闭(事件冒泡)
  15. ubuntu1604使用之旅——启动ssh系列
  16. arguments[0]()的详解
  17. TransactionScope 的基本原理简介
  18. 【bzoj2006】超级钢琴
  19. [Android Tips] 29. 如何判断当前编译的是哪个 Flavor ?
  20. 调用save()方法,页面显示保存成功,但是数据库中没有值的原因

热门文章

  1. 关于golang结束了编程风格中对于左大括号要不要换行之争.
  2. Docker修改容器中的时间
  3. 一文梳理清楚mysql各种锁
  4. Java跨平台原理(字节码文件,虚拟机)
  5. 阿里云短信功能php
  6. 配置Orchard Core 最新的包资源
  7. Jmeter系列(8)- 参数化:JSON提取器、全局参数化、CSV文件导入
  8. 深入剖析 Laravel 服务容器
  9. git 操作 :从远程仓库gitLab上拉取指定分支到本地仓库;git如何利用分支进行多人开发 ;多人合作代码提交实践
  10. 推荐一个pycharm验证xpath表达式的插件XPathView +​ XSLT