首页 > 其他分享 >GDB 学习笔记

GDB 学习笔记

时间:2024-11-13 10:59:43浏览次数:1  
标签:代码 gdb 笔记 学习 GDB num 断点 栈帧 调试

GDB 学习笔记

在使用 gdb 进行调试时,编译时需要加上 -g 参数,以确保生成包含调试信息的可执行文件。

常用命令

程序控制

  • run(r) [arg1 arg2 ...]
    从头开始运行程序直到结束或遇到断点,后面可以添加命令行参数。

  • continue(c)
    从当前位置开始继续执行,直到下一个断点或程序结束。

  • next(n)
    执行一行代码,停在下一行代码。不会进入函数内部。

  • step(s)
    单步执行,遇到函数调用时进入函数内部。

  • finish
    执行完当前函数并返回到调用此函数的那一行。

  • reverse-next(rn)
    逆向执行代码一步,返回到上一条已执行的代码。
    说明reverse-* 系列命令要求 gdb 支持逆向调试功能(可能需要开启记录模式)。

断点和观察点

  • break(b) [location]
    在指定位置(如 main 或行号)设置断点。

  • watch <variable>
    设置观察点,当指定变量的值发生变化时暂停程序执行并打印变化。

  • info breakpoints
    显示所有断点及观察点的信息。

  • delete <breakpoint_id>
    删除指定 ID 的断点;不加 ID 将删除所有断点。

栈帧与调用栈

  • backtrace(bt)
    显示当前调用栈,列出每个栈帧的函数及参数信息。

  • up [num]
    切换到调用栈中的上 num 层(更接近主函数)栈帧。

  • down [num]
    切换到调用栈中的下 num 层(更接近当前函数调用)栈帧。

变量和表达式

  • print(p) <expression>
    打印表达式或变量的值。

  • display <expression>
    每次程序停止时自动显示表达式的值。

  • undisplay <display_id>
    停止显示指定的自动打印项。

  • whatis <variable>
    打印变量的类型信息。

  • set var <variable>=<value>
    设置变量的值。

代码浏览

  • list(l)
    显示当前代码行的上下文。可以用 list <行号> 查看指定行附近的代码。

退出调试

  • quit(q)
    退出 gdb

备注

  • gdb 支持多种参数和脚本方式,建议在调试复杂项目时使用脚本化方法来简化调试流程。
  • 有些高级命令(如逆向命令)需要 gdb 支持记录模式,可通过 target record 启动。

标签:代码,gdb,笔记,学习,GDB,num,断点,栈帧,调试
From: https://www.cnblogs.com/fengtdi/p/18543439

相关文章

  • ts初步学习
    ts基础类型系统:变量和函数的类型声明(如 string, number, boolean 等)。接口(Interfaces):如何使用接口定义数据结构。类(Classes):了解类的定义和使用,包括类的构造函数和方法。装饰器(Decorators):Angular中的组件、模块等都是用装饰器定义的,如 @Component, @NgModule 等。1.......
  • Linux学习,clear命令
    Linuxclear命令在Linux和类Unix操作系统中用于清除终端屏幕上的所有内容,使终端看起来像是刚刚打开的一样。这个命令不会删除终端的历史记录或当前正在运行的命令,只是简单地清除屏幕上的显示内容。命令使用:在终端中输入 clear 并按下回车键即可执行该命令。注意事项:......
  • 计算机基础学习(非常详细)零基础入门到精通,收藏这篇就够了
    一、计算机概述计算机历史与发展:了解计算机的起源、发展简史,包括第一台电子计算机ENIAC的诞生、冯·诺依曼提出的“存储程序”原理等。计算机分类:巨型计算机、大中型计算机、小型计算机、微型计算机(如PC)、工作站等。计算机特点与应用:指令周期快、运算精度高、可靠性高......
  • Kruskal 重构树学习笔记+杂题
    图论系列:前言:相关题单:戳我一.最小瓶颈路唉,前面4个题单里其实有不少题是最小瓶颈路的做法啊。讲解摘自wiki。1.定义无向图\(G\)中\(x\)到\(y\)的最小瓶颈路是这样的一类简单路径,满足这条路径上的最大的边权在所有\(x\)到\(y\)的简单路径中是最小的。(对于下面这张......
  • 分布式事务~从seata实例来学习分布式事务
    部署dockerrun--name=seata1.4.2\--hostname=d67502e1d2ea\--mac-address=02:42:0a:ff:fe:02\--env=SEATA_IP=192.168.60.136\--env=SEATA_PORT=8091\--volume=/root/seata/seata-server-1.4.2/conf/registry.conf:/......
  • 工作学习笔记(七)Java的接口
    今天复习一下Java的基础知识,之前对于接口只有一个比较笼统的概念,经过一晚上的梳理,整理如下:它一种抽象类型,用于定义一组方法和常量。是Java多态性的重要体现。定义接口使用 interface 关键字来定义,例如 publicinterfaceMyInterface{} 。接口中的成员变量默认是 public......
  • C++基础学习6
    //练习://1.计算圆柱体体积和表面积//定义π=3.14159,输入半径r和高h。//公式://圆柱体积:体积=π*r^2*h//圆柱表面积:表面积=2*π*r*(r+h)////#define_CRT_SECURE_NO_WARNINGS1//#include<stdio.h>//#defineX3.14159//intmain()//{// floa......
  • [运维][Nginx]Nginx学习(1/5)--Nginx基础
    Nginx简介背景介绍Nginx一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个【POP3/SMTP/IMAP代理服务器】,是由伊戈尔·赛索耶夫(俄罗斯人)使用C语言编写的,Nginx的第一个版本是2004年10月4号发布的0.1.0版本。另外值得一提的是伊戈尔·赛索耶夫将Nginx的源码......
  • C++黑马程序员网课:我的学习心得与笔记(更新中)
    前言:笔记来源于C++黑马程序员网课视频:https://www.bilibili.com/video/BV1et411b73Z在此发布笔记,只是为方便学习,不做其他用途,原作者为黑马程序员。1.C++基础1.1用VisualStudio写C++程序输出HelloWorld1.1.1下载并配置VisualStudio环境1.1.2用VisualStudio写C......
  • 基于Java+SpringBoot+Mysql在线课程学习教育系统功能设计与实现五
    一、前言介绍:免费获取:猿来入此1.1项目摘要随着信息技术的飞速发展和互联网的普及,教育领域正经历着深刻的变革。传统的面对面教学模式逐渐受到挑战,而在线课程学习教育系统作为一种新兴的教育形式,正逐渐受到广泛关注和应用。在线课程学习教育系统的出现,不仅为学生提供了更加灵......