当进程崩溃出现coredump提示时,可以利用gdb来定位出错函数。

首先,把core_dump.XXX.gz文件从设备上拷贝出来,放到编译环境下,另外,还要把代码目录下的symbols文件夹也拷贝到编译环境下,因为程序用到很多库,很多时候出错是在库函数里,所以一定要拷贝当前编译时产生的symbols文件夹,android一般在out/target/product/下,Supernova一般在projects/目录下。

先解压core_dump.XXX.gz文件,然后用gbd命令调试它,如下命令:

/opt/toolchain/mstar/arm-2012.09/bin/arm-none-linux-gnueabi-gdb -core core_dump.1029/Coredump.gz

/opt/toolchain/mstar/arm-2012.09/bin/arm-none-linux-gnueabi-gdb就是刚才找到的命令工具,-c或-core是指调试core文件,后面是文件路径。回车后,弹出的命令行(gdb)就是调试命令行了。

(gdb) backtrace命令是查看当前线程函数栈回溯,简写是bt。

如果bt后都是问号,看不到函数名,说明运行到动态库里出错了。

用file命令载入调试的文件,假如提示是由/applications/bin/tvos产生的core,就载入这个二进制文件,这个文件也就在symbols/applications/bin/下。

还要载入库文件,可以用set sysroot、set solib-absolute-prefix、set solib-search-path来指定库搜索路径,set sysroot是set solib-absolute-prefix 的别名,set solib-absolute-prefix设置库的绝对路径前缀,而solib-search-path设置库的搜索路径,对绝对路径和相对路径均起作用。

设置好后,再backtrace,就可以看到具体出错的函数在哪儿了,可以定位到具体行数,这时去查代码就行了。

若是遇到multithread mutex/semaphore deadlock问题,可以输入”thread apply all bt”, 一次查看所有threads的backtrace.

mstar gdb调试的更多相关文章

  1. GDB调试命令小结

    1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息.gdb program //最常用的用gdb启动程序,开始调试的方 ...

  2. GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...

  3. gdb调试器的使用

    想要使用gdb调试程序的话,首先需要gcc -g main.c -o test 然后运行gdb test对程序进行调试 l (小写的l,是list的首字母),用以列出程序 回车    是运行上一个命令 ...

  4. 20145212——GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...

  5. gdb调试PHP扩展错误

    有时候,使用PHP的第三方扩展之后,可能会发生一些错误,这个时候,可能就需要更底层的方式追踪调试程序发生错误的地方和原因,熟悉linux下C编程的肯定不陌生gdb 首先,使用ulimit -c命令,查 ...

  6. gdb调试汇编堆栈过程的学习

    gdb调试汇编堆栈过程的学习 以下为C源文件 使用gcc - g code.c -o code -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 进入之 ...

  7. gdb调试

    ·代码(实验楼中的代码,改了部分数值)命名为test.c int g(int x) { return x + 7; } int f(int x) { return g(x); } int main(v ...

  8. 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析

    20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...

  9. GDB调试汇编堆栈

    GDB调试汇编堆栈 分析过程 C语言源代码 int g(int x) { return x+6; } int f(int x) { return g(x+1); } int main(void) { ...

随机推荐

  1. mui之href页面跳转

    <a class="mui-control-item" href="" onclick="window.location.href = 'dai ...

  2. JavaScript 函数(二)

    一.匿名函数 1.匿名函数 没有名字的函数即称为匿名函数. 2.使用方法 a.将匿名函数赋值给一个变量,这样就可以通过变量进行调用 b.匿名函数自调用 3.关于自执行函数(匿名函数自调用)的作用:防止 ...

  3. 微信小程序分页加载列表

    1.假设加载的数据为 2.wxml <view class="page"> <view class="page__bd"> <vi ...

  4. 面试题:java内存中的堆区和数据结构中的堆有什么区别

    java内存中的堆是一个  链表, 数据结构中的堆:就是一个栈

  5. java学习(2):类和对象

     一.类 类可以看成是创建对象的模板,它描述一类对象的行为和状态.创建对象也叫类的实例化.类必须先定义才能使用. 通过下面一个简单的类来理解下Java中类的定义: public class Dog { ...

  6. OpenSessionInViewFilter 的配置及替代方案

    OpenSessionInViewFilter 的配置及替代方案 博客分类: hibernate OpenSessionInViewFilter 的配置及替代方案  Spring 为我们提供了一个叫做 ...

  7. getResourceAsStream的路径问题

    1.Class类的getResourceAsStream this.getClass().getResourceAsStream("/resource.properties"); ...

  8. Codeforces K. Ice Skating(求强连通分量)

    题目描述: Ice Skating time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  9. commix 命令注入工具

    关于系统命令注入,可以参考这篇文章:命令攻击介绍 系统命令注入场景 在对企业进行安全测试时候,很少会发现系统注入漏洞.这是因为大部分情况下代码业务主要是数据操作.文件操作.逻辑处理和api接口调用等, ...

  10. jmeter针对websocket协议的压测

    之前一直没有接触过websocket协议,所以一直对websocket的压测存在疑惑,在网上参考文章并不断尝试之后,终于有所得:第一次用jmeter的websoket插件,用的ws非加密协议,请求都能 ...