Fatal signal 11 (SIGSEGV), code 2调试方法
来源:互联网 发布:python bt文件下载 编辑:程序博客网 时间:2024/06/06 16:55
JNI中用C语言引起的bug:
Fatal signal 11 (SIGSEGV), code 2
对于习惯Java的程序员, 调试C程序是一件很头痛的事, 尤其是这种bug, 出现一次整个App立刻崩掉, 并且还不给你打印函数调用栈, 压根不知道哪一行出了问题. 如果google或者百度这个错误的描述, 答案往往是指针使用了一个不可用的位置, 或者是数组越界, 对程序问题定位也没有有价值的帮助.
Bug描述
我遇到的这个问题出错误的地方是反复执行了许多次才出现, 这种问题还得多测几次才能复现. 连续执行的越快出现的概率越高.
调试方法: 分而治之
网上有C或者.so文件的调试方法, 大都很麻烦, 而且有的分析log的方式学起来慢. 最终能否解决问题也不一定. 这里给一个一定能解决问题, 而且调试起来很容易的方式.
参考:
程序员你在工作中调试过最难的BUG是什么?
该文所说的方法”分而治之”, 最终帮助他解决了问题. 实际使用该方法的时候需要多次拆分代码.
步骤
- 确定问题所发生的代码范围–我这肯定是C代码出了问题
- 将问题范围按照流程分2段, 每一段都有一个输入和输出, 注释掉其中一段代码, 然后运行, 如果没问题, 说明正是注释掉的代码的问题. 注释的代码中如果有后面的输入用到的变量就写死.
- 按照步骤2, 将问题代码范围逐步缩小, 就算代码量庞大, 第二步执行5次, 就是将问题定位到1/32的代码, 这依然是很快的, 半个小时就搞定了
- 最终得到出问题的那几行, 或者那一行, 这样再仔细看代码, 这个时候很容看出问题. 如果是因为对C语言的API不熟悉导致的, 搜一下某个C方法怎么用, 很快就解决了.
上述链接所述的问题最终是硬件的问题, 无论什么问题, 只要定位到出错误的地方就容易很多. 每次把代码拆分成2段, 这样自己会对代码范围的排查清晰一点.
阅读全文
0 0
- Fatal signal 11 (SIGSEGV), code 2调试方法
- fatal signal 11 sigsegv
- Fatal signal 11 (SIGSEGV)
- Genymotoin模拟器调试出现 Fatal signal 11 (SIGSEGV) at 0x000000b4 (code=1)
- Fatal signal 11 (SIGSEGV) at 0x390955ae (code=1)
- Fatal signal 11 (SIGSEGV) at 0x000007c4 (code=1)
- Fatal signal 11 (SIGSEGV) at 0x390955ae (code=1)
- Fatal signal 11 (SIGSEGV) at 0x00000048 (code=1)
- Fatal signal 11 (SIGSEGV) at 0x00000004 (code=1)
- Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)
- Fatal signal 11 (SIGSEGV) at 0xccf0001d (code=1)
- Fatal signal 11 (SIGSEGV) code 1 (SEGV_MAPERR)的解决方案
- JNI中Fatal signal 11 (SIGSEGV), code 1的错误.
- Android中Fatal signal 11 (SIGSEGV) at 0x6df6d7bf (code=2), thread 31535
- Android中Fatal signal 11 (SIGSEGV) at 0x6df6d7bf (code=2), thread 31535 问题
- Fatal signal 11 (SIGSEGV), code 2, fault addr 0x9ff811c0 in tid 28902
- Android Fatal signal 11 (SIGSEGV)
- Fatal signal 11 (SIGSEGV) 错误
- 操作系统之进程基础及死锁处理策略
- [Python高效编程]
- KVM-Qemu-Libvirt三者之间的关系
- python 读取txt出现\xef\xbb\xbf…的问题
- 嵌入式Linux驱动笔记(十八)------浅析V4L2框架之ioctl
- Fatal signal 11 (SIGSEGV), code 2调试方法
- python简单的爬虫程序
- hibernate框架一对多级联删除例子(十三)
- 0、slam基础
- Matlab2017a安装教程及语言设置
- Vue.js组件——标签页组件
- gem5跑linux或安卓bench
- 如何成为一名全栈语音识别工程师?
- 模板的类型萃取