在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后解决。

创建线程 出现SIGSEGV crash的更多相关文章

  1. 0036 Java学习笔记-多线程-创建线程的三种方式

    创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...

  2. [笔记]linux下和windows下的 创建线程函数

    linux下和windows下的 创建线程函数 #ifdef __GNUC__ //Linux #include <pthread.h> #define CreateThreadEx(ti ...

  3. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  4. python:threading多线程模块-创建线程

    创建线程的两种方法: 1,直接调用threading.Thread来构造thread对象,Thread的参数如下: class threading.Thread(group=None, target= ...

  5. 【java并发】传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...

  6. Java并发编程:如何创建线程?

    Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...

  7. 驱动开发之 创建线程函数PsCreateSystemThread

    PsCreateSystemThread 创建一个执行在内核模式的系统线程. 注意:创建线程必须用函数PsTerminateSystemThread强制线程结束.否则该线程是无法自动退出的. 函数原型 ...

  8. iOS开发多线程篇—创建线程

    iOS开发多线程篇—创建线程 一.创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建.启动线程 (1) NSThread *thread = [[NSThread alloc] in ...

  9. 创建线程方式-NSThread

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

随机推荐

  1. Linux下运行bash脚本显示“: /usr/bin/env: "bash\r": 没有那个文件或目录

    用 ./ 运行bash脚本文件出现 报错信息 /usr/bin/env: "bash\r": 没有那个文件或目录 错误原因:这主要是因为bash后面多了\r这个字符的原因.在lin ...

  2. go案例:客户管理系统流程 mvc模式 分层设计

    下面是一个简要的客服系统,主要是演示分层计.. model : 数据部份: package model import "fmt" //声明一个结构体,表示一个客户信息 type C ...

  3. nodejs安装 Later version of Node.js is already installed. Setup will now exit 及 node与npm版本不符

    暴力删除nodejs导致无法重新安装  Later version of Node.js is already installed. Setup will now exit 1.电脑全局搜索nodej ...

  4. 【C++周报】第二期 2021-8-19

    这次我们照样看一道题.个人认为比上一次的简单. https://vijos.org/p/1130 先说方法,动态规划,你能想到什么? "在它的左边加上一个自然数,但该自然数不能超过原数的一半 ...

  5. php安装imagick扩展

    下面/usr/local/php5是php的安装目录 安装imagickcd /usr/local/srcwget http://pecl.php.net/get/imagick-3.0.1.tgz  ...

  6. Docker系列(17)- MySQL同步数据

    #获取镜像 [root@localhost ~]# docker pull mysql:5.7 #启动容器,需要做数据挂载!安装启动mysql,需要配置密码的,这是注意点! #官方安装文档:docke ...

  7. chrome 的 options 参数

    在使用selenium浏览器渲染技术,爬取网站信息时,默认情况下就是一个普通的纯净的chrome浏览器,而我们平时在使用浏览器时,经常就添加一些插件,扩展,代理之类的应用.相对应的,当我们用chrom ...

  8. CometOJ-[Contest #10]鱼跃龙门【exgcd】

    正题 题目链接:https://cometoj.com/problem/1479 题目大意 给出\(n\)求一个最小的\(x(x>0)\)满足 \[\left(\sum_{i=1}^xi\rig ...

  9. ARC106E-Medals【hall定理,高维前缀和】

    正题 题目链接:https://atcoder.jp/contests/arc106/tasks/arc106_e 题目大意 \(n\)个员工,第\(i\)个在\([1,A_i]\)工作,\([A_i ...

  10. YbtOJ#482-爬上山顶【凸壳,链表】

    正题 题目链接:https://www.ybtoj.com.cn/contest/116/problem/2 题目大意 \(n\)个点,\(x\)坐标递增,第\(i\)个点向第\(j\)个点连边. 开 ...