gdb调试手段

1.使用gdb调试,前一般需要打开coredump文件,并且编译加上-g。打开coredump的方法:配置生成core文件: ulimit -c unlimited

2.gdb运行,如果目标机上有,就在目标机上运行,目标机上没有,就将core文件拷贝下来,使用使用编译工具链的gdb运行
/opt/swi/y17-ext/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gdb AvnService core-AvnService-1526383829 
3.设置查找的库路径,
set solib-search-path /opt/flaircomm/sysroots/armv7a-vfp-neon-oe-linux-gnueabi
set solib-search-path ./lib/
4.设置查找的库绝对路径的前缀(set sysroot 与 set solib-absolute-prefix 是同一条命令)
(gdb) set sysroot /
5.查看Crash的堆栈信息使用bt或backtrace
(gdb) bt
/opt/swi/y17-ext/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-objdump -ds AvnService>elf 反汇编
6.使用disassemble/disass命令反汇编一个函数或者一段内存地址
disass func_name 
disassemble 0×0 0×10
7. 查找出现Crash的最后一个函数f 0
f 0 
8.查看哪些库未加载
i sharelibrary 
9.将gdb推到板子里面,可以gdb AvnService 来运行,然后再按r或者run来运行
gdb AvnService
r
10.常用的gdb调试命令:
    run 运行程序,可简写为r
    next 单步跟踪,函数调用当作一条简单语句执行,可简写为n
    step 单步跟踪,函数调进入被调用函数体内,可简写为s
    finish 退出函数
    until 在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体,可简写为u。
    continue 继续运行程序,可简写为c
    stepi或si, nexti或ni 单步跟踪一条机器指令,一条程序代码有可能由数条机器指令完成,stepi和nexti可以单步执行机器指令。
    info program 来查看程序的是否在运行,进程号,被暂停的原因。
11.可以执行gdb attach pid即可调试正在运行的程序
12. 查看运行时数据
    print 打印变量、字符串、表达式等的值,可简写为p
    p count 打印count的值
    p cou1+cou2+cou3 打印表达式值
    print接受一个表达式,GDB会根据当前的程序运行的数据来计算这个表达式,表达式可以是当前程序运行中的const常量、变量、函数等内容。但是GDB不能使用程序中定义的宏。

13.那么如何使用 core 文件查看程序的错误信息呢?
编译: gcc -Wall -Werror -o test -g test.c

14.多线程调试,查看线程的堆栈信息:
(1).方法一:
gdb --batch -ex "thread apply all bt" -p <被分析的进程的pid>  将这条命令的打印dump出来
--batch: 执行批处理,不进入交互模式
--ex: 执行gdb 命令
"thread apply all bt full": 打印所有线程堆栈

(2).方法二:
gdb -q --batch --ex "set height 0" -ex "thread apply all bt full" [可执行文件] [core文件]
解释:
-q: 不打印gdb的版权消息
--batch: 执行批处理,不进入交互模式
--ex: 执行gdb 命令
"set height 0": 不对输出进行分页
"thread apply all bt full": 打印所有线程堆栈
 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值