GDB调试

一、GDB调试

编译程序时应加上-g选项

1、gdb启动时指定被调试程序的参数

如:gdb -args ./test a b c

2、gdb中通过命令来设置

如:(gdb)set args a b c

(gdb)show args

3、在程序运行时直接指定

如:(gdb)r a b

(gdb)show args

(gdb)中常用命令:

l

显示源代码,后可加行号、函数名

break n

在第n行设置断点(后可加if条件)

break func

在函数func处设置断点

info break

查看断点信息

r

运行程序

n

单步执行(不进入函数)

s

单步执行(进入函数)

c

继续运行程序,同continue

P /<f> str

打印变量str的值,同print<f>是输出格式,如/x表示输出为十六进制

forward-search xx

向前搜索xx字符

reverse-search xx

向后搜索xx字符

bt

显示程序堆栈,调用栈信息

bt full:显示所有程序的局部变量值

info locals:打印当前程序的局部变量值

finish

退出当前函数

q

退出调试

 

:: 用于指定一个文件或一个函数中的变量

@ 用于查看一段连续的内存空间的值,比如数组的一段

如:

int *array = (int *)malloc(len * sizeof(int));

(gdb)P *array@len表示查看数组第一个元素的内存地址的值@查看内存的长度

x 查看内存命令,examine的简写

x /nfu addr //表示以f格式打印从addr开始的n个长度单位为u的内存值

n为输出单元的个数

f为输出格式,x表示16进制输出,o表示8进制输出

u为单元长度,b表示byteh表示2bytew表示4byteg表示8byte

 

 

设置观察点

watch <expr>

为表达式/变量expr设置一个观察点,一旦表达式值有变化时马上停住程序。使用delete命令可删除观察点

 

设置捕捉点

catch <event>

event发生时停住程序,event可以为throw的异常、catch到的异常、execfork等。

 

维护停止点,可使用cleardeletedisableenable等命令

为停止点设定运行命令:

commands [bnum]

...command-list...

end

为断点号bnum指定一个命令列表,当该断点生效时,gdb会依次运行list中的命令。

 

二、GDB远程调试

1、gdbserver方式

gdbserver允许远程GDB调试器通过target remote命令与运行在目标板上的程序建立连接。GDBgdbserver之间可通过串口线或TCP/IP网络连接通信,采用的通信协议是标准的GDB远程串行协议(Remote Serial Protocol)。

2、stub(插桩)方式

调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。stub方式则需要通过链接器把调试代理和要调试的程序链接成一个可执行的应用程序文件,如果程序运行在没有操作系统的机器上,那么stub需要提供异常和中断处理序,以及串口驱动程序,如果程序运行在有操作系统的嵌入式平台上,那么stub需要修改串口驱动程序和操作系统异常处理。

 

目标机上安装GDB

1、下载、解压gcc源码包

#tar xzvfgdb-7.4.tar.gz

2、安装相关工具

#sudoapt-get install texinfo

#sudoapt-get install libncurses5-dev

#sudoapt-get install m4

#sudoapt-get install flex

#sudoapt-get install bison

3、安装GDB

#./configure --target=arm-linux --prefix=/usr/local/arm-gdb-v

# make

# make install

4、编译gdbserver

配置:

#cd /gdb/gdbserver

#./configure --target=arm-linux --host=arm-linux

编译阶段:

#make CC=arm-linux-gcc

交叉编译:

#arm-linux-gcc–g tstgdb.c–o tstgdb

目标机运行:

#./gdbserver10.0.0.10:2335 tstgdb

 

开发机调试程序:

#arm-linux-gdb tstgdb

(gdb)target remote 10.0.0.10:2335

 

GDB调试

上一篇:Hibernate_day04--课程安排_Hibernate查询方式_对象导航查询_OID查询


下一篇:Mysql5.x更新到Mysql8.x