首页 > 其他分享 >gdb的基本指令

gdb的基本指令

时间:2023-09-23 20:33:59浏览次数:39  
标签:基本 do 0x400000 xxx gdb 指令 0x100 断点

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,若还有断点未删除,会提示

标签:基本,do,0x400000,xxx,gdb,指令,0x100,断点
From: https://www.cnblogs.com/mjyrise/p/17725000.html

相关文章

  • 3D打印进阶之230个3D打印Gcode指令以及释义 + 在开发工具VScode中配置Gcode指令提示
    Gcode指令以及释义"G0":"快速移动,用于快速移动到指定位置,在使用该命令之前,要考虑其移动的直线路径上是否有障碍物","G1":"运动。F:喷嘴最大移动速度,单位为mm/min;E:控制挤出机给丝量,即输入丝材的长度,单位mm,也可控制回抽。与M82(绝对挤出)/M83(相对)命令配合",......
  • Elasticsearch 常用指令
    Elasticsearch常用指令查询所有节点$curl'http://127.0.0.1:9200/_cat/nodes'192.168.31.127496102.162.112.03dilmrt*node-1查询集群状态$curl-k'http://127.0.0.1:9200/_cluster/health?pretty'{"cluster_name":"docker-clus......
  • MySQL 基础指令
    MySQL基础指令参考文档:MySQL官网MySQL::MySQL8.0参考手册数据结构可视化创建数据库CREATEDATABASE<数据库名>;切换数据库USE<数据库名>;创建表CREATETABLEIFNOTEXISTS`request_record_info`( `id`BIGINTAUTO_INCREMENT......
  • 记录一些常用的指令
    查看文件夹占用sudodu-h--max-depth=1 查看端口:netstat-tuln这个命令的意思是列出所有TCP、UDP协议的监听状态的网络连接,其中:-t表示TCP,-u表示UDP,-l表示仅列出正在监听的端口,-n表示以数字形式显示端口号,而不是使用服务名称。......
  • 基本查找 / 顺序查找
    //基本查找/顺序查找核心:从0索引开始挨个查找//例:查询元素number是否存在int[]arr={131,127,147,81,103,23,7,79};System.out.println("请输入要查找的数:");Scannersc=newScanner(System.in);StringnumberString=sc.nextLine();intnumber=Integer.parseI......
  • Linux服务器编程 基本API与概念
    Linux服务器编程基本API与概念基本参数和结构体协议族参数:PF_UNIX,PF_INET,PF_INET6;地址族参数(sa_family_t):AF_UNIX,AF_INET,AF_INET6;服务类型参数:SOCK_STREAM流服务;SOCK_UGRAM数据报服务;与SOCK_NONEBLOCK相与非阻塞类型;与SOCK_CLOEXEC相与fork子进程在子进程......
  • 【Java 基础篇】Java 自动装箱与拆箱:优雅处理基本数据类型与包装类的转换
    在Java编程中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是两个重要的概念。它们使得基本数据类型与其对应的包装类之间的转换更加方便,同时也提高了代码的可读性和可维护性。本篇博客将深入探讨自动装箱和拆箱的概念、用法以及为什么它们对Java程序员如此重要。什么是自动装箱和拆箱......
  • C#连接MYSQL数据库基本步骤详解
    1、下载连接需要的connect-net包下载链接在这里:https://dev.mysql.com/downloads/connector/net/根据版本问题,我选择下载6.9的:下载完成之后,直接在我们新建好的窗体里面右键引用那里:选择添加引用:然后在选择下面浏览:按照C\ProgramFiles(X86)\MYSQL的路径下面,找到mySQL.d......
  • IGMP协议的基本配置
    1、使能IGMP功能[r1-gigabitethernet0/0/1]IGMPenable2、配置IGMP版本[r1-gigabitethernet0/0/1]IGMPversion1/2/33、全局使能IGMPsnooping功能分析:其中第四条:vlan下使能IGMP代理功能有交换机作为代理,交换机的出接口做为查询器,负责收集报告报文,只要存在报告报文就一直向路由......
  • linux基本命令(ls,man,pwd,cd,mkdir,echo,touch,cp,mv,rm,rmdir)
    本章命令一共11个123456lsmanpwdcpmkdirechotouchcpvmrmmkdir    命令的使用1.ls命令作用:列出指定目录下的工作目录,默认当前目录语法:ls[参数][文件目录]参数-a列出所有文件,包括以.开头的隐藏文件参数-d列出目录本身并不包括目录中的文......