如何使用gdb进行调试和执行各种基本指令?

摘要:1、gdb的简介 ​	GDB全称"GNU symbolic debugger",它诞生于GNU计划(gcc也同样诞生于该计划),是Linux下常用的程序调试器,其通常以gd
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,若还有断点未删除,会提示