gdb的基本指令

1、gdb的简介

​ GDB全称"GNU symbolic debugger",它诞生于GNU计划(gcc也同样诞生于该计划),是Linux下常用的程序调试器,其通常以gdb命令的形式在终端中使用。

2、启用GDB调试

​ 在使用GDB调试某个程序之前,需要对程序进行编译,并且需要在编译时加上编译选项 -g,否则程序是不包含调试信息的。编译完成之后,可以输入命令:gdb xxx(xxx为所要调试的程序名)。

3、常用命令
命令 效果
quit/q 退出GDB
run/r 运行程序,若程序需要输入参数,也在这输入参数
kill 停止程序
break/b xxx 在函数xxx入口处设置断点
break/b *0x400000 在地址0x400000处设置断点
delete/d 1 删除断点1
delete/d 删除所有断点
stepi 执行1条指令
stepi n 执行n条指令
nexti 类似stepi,但是以函数调用为单位
continue/c 继续执行
finish 运行到当前函数返回
disas 反汇编当前函数
disas xxx 反汇编函数xxx
disas 0x400000 反汇编位于地址0x400000附近的函数
disas 0x400000,0x40050d 反汇编位于0x400000~0x40054d范围内的函数
print/p $rax/0x100 以十进制输入%rax的内容/0x100
print/p /x $rax/0x100 以十六进制输出%rax的内容/0x100
print/p /t $rax/0x100 以二进制输出%rax的内容/0x100
info frame 有关当前栈帧的信息
info registers 显示所有寄存器的值
info break/b 显示所有断点的信息
4、使用实例

​ 本实例将使用gdb对下面代码进行调试:

#include <stdio.h>

long fact_do(long n)
{
	long result = 1;
	do{
		result *= n;
		n = n-1;
	}while(n > 1);
	return result;
}

int main()
{
	long a = 5;
	long result = fact_do(a);
	return 0;
}
  • 编译代码
gcc -g test01.c -o test01
  • 启动gdb
gdb test01
  • 添加断点
b fact_do  //在fact_do函数入口处添加断点
  • 运行程序
run

​ 运行程序之后,函数会停止在函数fact_do的第一条命令

  • 查看n变量的值

  • 查看断点信息

  • 删除断点

  • 设置break条件

  • 逐步执行

  • 退出gdb,若还有断点未删除,会提示

posted @ 2023-09-23 20:20  mjy66  阅读(59)  评论(0编辑  收藏  举报