GDB调试

Ubuntu下DEBUG一个断错误

sudo gdb ./test_libusb

test_libusb本身需要sudo权限

jimmy@jimmy-MS-7B53:~/mv/wiwide_camera_lib$ sudo gdb ./test_libusb
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./test_libusb...done.
(gdb) 

运行run

(gdb) run

常用的命令如下:

(gdb) start                         //开始调试
(gdb) n                             //一条一条执行
(gdb) step/s                        //执行下一条,如果函数进入函数
(gdb) backtrace/bt                  //查看函数调用栈帧
(gdb) info/i locals                 //查看当前栈帧局部变量
(gdb) frame/f                       //选择栈帧,再查看局部变量
(gdb) print/p                       //打印变量的值
(gdb) finish                        //运行到当前函数返回
(gdb) set var sum=0                 //修改变量值
(gdb) list/l 行号或函数名             //列出源码
(gdb) display/undisplay sum         //每次停下显示变量的值/取消跟踪
(gdb) break/b  行号或函数名           //设置断点
(gdb) continue/c                    //连续运行
(gdb) info/i breakpoints            //查看已经设置的断点
(gdb) delete breakpoints 2          //删除某个断点
(gdb) disable/enable breakpoints 3  //禁用/启用某个断点
(gdb) break 9 if sum != 0           //满足条件才激活断点
(gdb) run/r                         //重新从程序开头连续执行
(gdb) watch input[4]                //设置观察点
(gdb) info/i watchpoints            //查看设置的观察点
(gdb) x/7b input                    //打印存储器内容,b--每个字节一组,7--7组
(gdb) disassemble                   //反汇编当前函数或指定函数
(gdb) si                            // 一条指令一条指令调试 而 s 是一行一行代码
(gdb) info registers                // 显示所有寄存器的当前值
(gdb) x/20 $esp                    //查看内存中开始的20个数出错

运行出错信息

Thread 1 "test_libusb" received signal SIGSEGV, Segmentation fault.
__memcpy_avx_unaligned () at ../sysdeps/x86_64/multiarch/memcpy-avx-unaligned.S:238
238     ../sysdeps/x86_64/multiarch/memcpy-avx-unaligned.S: No such file or directory.

输入backtrace查看出错点

(gdb) backtrace
(gdb) backtrace
#0  __memcpy_avx_unaligned () at ../sysdeps/x86_64/multiarch/memcpy-avx-unaligned.S:238
#1  0x00007ffff615d908 in mode_data_api (sdata=0x7fffffffd260 "WIUSB\016", sdata_len=2040, rdata=0x7fffffffda60 "\002u-U( \034", 
    rdata_len=0x7fffffffd254) at util.c:89
#2  0x00007ffff615b870 in wd_getCameraConfig (config=0x7fffffffe2a0) at api.c:985
#3  0xa8a7a7a8a8a8a7aa in ?? ()
#4  0xa7a8a7a8a8aaa7a8 in ?? ()
#5  0xa6a7a7a8a7a6a7a8 in ?? ()
#6  0xa8a6a7a7a6a6a6a6 in ?? ()
#7  0xa7a7a6a8a7a7a7a7 in ?? ()
#8  0xa6a6a7a8a7a8a7a7 in ?? ()
#9  0xa7a7a7a8a8a7a7a6 in ?? ()
#10 0xa6a7a6a7a7a7a7a7 in ?? ()
#11 0xa7a6a6a6a6a5a6a6 in ?? ()
#12 0xa7a7a6a6a8a7a7a7 in ?? ()
#13 0xa6a6a7a7a6a5a6a7 in ?? ()
#14 0xa7a7a8a7a6a6a7a6 in ?? ()
#15 0xa5a5a6a5a6a6a6a6 in ?? ()
#16 0xa6a5a5a6a6a5a6a5 in ?? ()
#17 0xa6a5a5a4a5a5a6a5 in ?? ()
#18 0xa5a6a5a7a7a6a4a5 in ?? ()
#19 0xa5a5a7a5a5a7a5a3 in ?? ()
可以看到在mode_data_api函数中出错了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值