GDB调试

一:GDB介绍:

1:GDB完成的的调试任务:

1:设置断点;

2:监视程序变量的值;

3:程序的单步执行;

4:修改变量的值;

2:在可以使用GDB调试程序之前,必须只用-g选项编译源文件。可在makefile中定义

CFLAGS变量: CFLAGS=-g

二:GDB使用文件的生成:

1:为了能够对程序进行调试,需要在编译的执行文件包含调试信息,在编译时候需要指定[-g]参数;

命令格式:cc -g -o execfile sourcefile

例如: cc -g -o gdbtest gdbtest.c

三:GDB程序调试:

1:命令格式:

gdb [options] [execfile] [corefile/processid]

2:程序调试:

gdb execfile processid

(= gdb execfile + attatch processid)

(= gdb + file execfile + attatch processid)

3:异常调试:

gdb execfile corefile

(= gdb execfile + core corefile)

(= gdb + file execfile + core corefile)

四:GDB命令介绍:

1:运行GDB调试程序时通常使用如下的命令:

gdb progname

2:在gdb提示符处键入help,将列出命令的分类,主要的分类有:

aliases: 命令别名

breakpoints: 断点定义

data: 数据查看

files: 指定并查看文件

internals: 维护命令

running: 程序执行

stack: 调用栈查看

statu: 状态查看

tracepoints: 跟踪程序执行

3:键入help后跟命令的分类名,可获得该类命令的详细清单:

1:GDB程序调试(运行程序)

RUN: 运行已加载的程序

kill: 结束正运行的程序

Step: 单步调试正运行的程序,运行一行源程序并进入函数内部。

Next: 单步调试正运行的程序,运行一行源程序但不进入函数内部

Jump: 在指定处继续运行程序

Continue: 继续运行程序

Finish: 运行至当前函数尾并返回

Until: 运行至下一个地址大于当前地址的源程序行或一个指定源程序行

2:GDB程序调试(查看栈内容)

bt: 显示所有栈内容

frame: 选择一栈地址并显示其中的内容

down: 选择被当前栈所调用的栈地址并显示其中内容

up: 选择调用当前栈得栈地址并显示其中内容

return: 返回调用当前栈的栈地址

3:GDB程序调试(查看数据)

print: 显示表达式值

set: 设置变量值

diaplay: 在每次程序运行停止时显示表达式值

delete display: 消除表达式显示

x: 显示指定内存内容

4:GDB程序调试(查看源文件)

list:显示源文件

dir: 定义调试程序的源文件Path

5:GDB程序调试(设置删除断点)

break: 设置断点

clear: 清除断点

watch: 设置表达式监视对象

ignore: 设置无效的断点号

delete: 删除断点(指定断点号)

#info break 查看全部断点(id)

6:GDB程序调试(查看程序环境及状态)

cd: 改变工作目录

shell: 执行shell命令

pwd: 显示工作目录

search: 在源文件中查找字符串

info: 查看debug状态

7:GDB程序调试(终止)

在gdb调试环境中键入quit或ctrl-d可终止gdb调试

注:键入ctrl-c只能终当前gdb命令返回gdb命令行

总结:

1、file <文件名>

加载被调试的可执行程序文件。因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。

示例:(gdb) file gdb-sample

2、r

Run的简写,运行被调试的程序。如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。

示例:(gdb) r

3、c

Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。

示例:(gdb) c

4、b <行号>

b <函数名称>

b *<函数名称>

b *<代码地址>

b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。

其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。如果不了解汇编,可以不予理会此用法。

5、set args [parameter]

gdb调试的时候,设置命令行参数。

6、bt

bt可以去查看堆栈信息。down和up和一个一个打印堆栈信息。bt直接打印全部堆栈信息。

7、n

单步调试

8、s

单步进入

你可能感兴趣的:(Linux)