目录
前言
操作系统:Fedora
本文为学习笔记,通过使用一些常用的命令,完成一些简单的例子,来大概了解GDB调试器的使用
GDB调试器的使用
(1)打开命令终端,输入 gdb 进入 GDB 调试器(输入 quit 或 按 Ctrl + D 组合键退出GDB程序)
(2)输入 file yourprogram(需要调试的程序),启动程序准备调试
GDB常用命令详解
以源程序 example.c 为例演示调试基本过程
源程序 example.c 内容如下
#include <stdio.h>
void debug(char *str){
printf("debug information: %s\n",debug);
}
main(){
int i,j;
j=0;
for(i=0;i<10;i++){
j+=5;
printf("now a==%d\n",j);
debug("xxxxxxxxxxxx");
}
}
使用 gcc -g -o exam example.c 编译生成可执行文件
……(不完全显示)
输入 gdb 进入 GDB 调试器,再执行 file exam 命令,加载 exam 程序进行调试
list 命令
list 命令显示多行源代码,从上次的位置开始显示,默认情况一次显示 10 行,第一次使用时,从代码起始位置显示。
list n 显示以第 n 行为中心的 10 行代码。例如,list 8,显示了3~12行
list faunctionname 显示以名为 faunctionname 的函数为中心的10行源代码。
(书上这么说的,不过好像没什么用,和list 没区别……)
list - 命令显示刚才打印过的源代码之前的源代码
断点命令 break 和运行命令 r(run的缩写)
break location:在 location 位置设置断点,GDB 会在执行该位置的代码之前停下来。例如:break 10 表示在第 10 行设置断点
使用 r 命令运行该程序,这时程序在第 10 行前停下来
continue 或者 c 命令继续运行
使用 delete breakpoints 断点号 命令删除断点,这里的断点号表示的是第几个断点,例如刚刚
使用 delete breakpoints 1表示删除第 10 行所定义的断点
clear n 命令表示清除第 n 行的断点,因此此时命令 clear 10 与 delete breakpoints 1 等效
disable n 表示使得编号为 n 的断点暂时失效,下面程序运行到结束
……(不完全显示)
enable n 表示使得编号为 n 的断点有效
info 命令可以查看断点的相关信息
display 命令
display 命令可以查看参数的值,其参数可以是变量或表达式。当程序运行到某个断点停下时,显示参数的值。必须在程序运行后,参数中的变量才能显示。
使用 r 命令运行程序到第 10 行断点时,执行该命令
step 及 next 命令
watch 命令
watch 命令可以设置观察点,使用观察点可以使得某表达式的值发生变化时,程序暂停执行。
给出了变量 j 的变化情况
给出了变量发生变化的地方
set varname 命令
可以使用 set varname 命令在程序运行过程中动态改变变量的值,如下,把 j 设置为 500