1、gdb工具介绍

1.1、gdb和gdb server的区别

(1)gdb server运行在设备上,运行要调试的程序并监听是否有客户端要连接;gdb运行在虚拟机或者编译服务器上,通过向gdb server发送命令,完成调试;
(2)gdb直接运行在调试机上,运行要调试的程序并用命令来调试程序;
(3)gdb和gdb server在连接方式上有区别,但是在gdb的命令上几乎一样;

1.2、gdb功能介绍

(1)启动你的程序,按照你自定义的方式运行程序;
(2)可以让被调试的程序,在你设置的指定断点处停住;
(3)当程序被停住时,查看此时程序中发生的事情;
(4)动态的改变程序的执行环境;

1.3、gdb源码获取

(1)源码下载网址:http://ftp.gnu.org/gnu/gdb/;
(2)编译gdb源码:
a)配置configure,(主要是配置交叉编译工具链、安装目录;
b)运行Makefile:make & make install;
(3)大概率不能直接编译通过,不建议去编译源码,问老员工或者芯片的技术支持有没有对应平台的gdb工具;

1.4、被gdb调试的程序的要求

(1)被GDB调试的程序,不能被arm-linux-stripe,否则程序没有符号信息。就是要用debug版本的sonia来调试;
(2)在gdb调试时,有的变量看不到值,显示被优化:是因为在编译程序的时候,优化等级过高,可在去掉-o2等优化编译选项;
(3)编译源码时需要加上“-g”编译选项;(创建符号表,符号表包含了程序中使用的变量名称的列表)

2、gdb的使用方法

(1)程序未运行:gdb + 程序;
(2)程序已经运行:gdb -p + 进程号;

3、gdb server使用方法

3.1、设备端

gdb_server 10.6.5.204:2345 ./app

(1)gdb_server:gdb server工具;
(2)10.6.5.204:虚拟机或者编译服务器的ip地址;
(3)2345:是监听的端口号,和客户端要匹配;
(4)./app:要调试的程序;

3.2、虚拟机或者编译服务器端

(1)arm-himix200v002-linux-gdb	./app

//进入gdb命令行,连接gdb server
(2)target remote 10.35.232.236:2345

(1)先用gdb运行要调试的程序,注意这里的程序要和gdb_server运行的程序一样;
(2)进入gdb命令行,连接服务器连接gdb server,注意两边的IP地址和端口号要匹配;
(3)10.35.232.236:这是设备的ip地址;

4、gdb下的常见指令介绍

4.1、gdb中使用linux命令

在这里插入图片描述

只需要在命令前加上shell即可;

4.2、常用指令

命令解释
run运行程序
continue进行运行程序
next单步运行
quit退出gdb
break设置断点
print打印参数值
show args查看参数
info args查看当前函数的参数及其值
info function显示所有函数名称
bt查看栈信息
set args指定运行时参数:set args 10 20 30

4.3、断点设置指令

break:设置断点,简写b
	b func              断点函数
	b file:linenum   断点文件行号
	b *address       断点地址

enable/disable:使能/去使能断点
	en/dis  1         使能/去使能断点1
	en/dis             使能/去使能所有断点

delete:删除断点
	delete 1            删除断点1
	delete               删除所有断点

info breakpoints:显示所有断点信息

checkpoint:记录断点状态,用于恢复断点。不可用于多线程
	checkpoint
	restart 1
	
Info checkpoint:显示checkpoint信息

watch:跟踪变量值,当变量值发生变化时,暂停
	watch    a 局部变量,在跳出当前函数时会失败
	watch    *0x600af0
	
Info watchpoint:显示watchpoint信息
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐