当前位置: 首页 > article >正文

gdb/cgdb:调试器

介绍

安装

检查软件包列表版本

安装

gdb安装

cgdb安装

验证安装

使用

注意事项

常用命令

cgdb中

gdb/cgdb中

1.读取可执行程序格式

2.列出代码

3.打断点

4.删除断点

5.查看断点

6.禁用断点

7.查看信息

8.调试

小知识


介绍

gdb(GUN Debugger):是一个命令行调试工具,主要用于C/C++语言编写的程序。

cgdb:gdb的增强版,提供了一个友好的用户界面,上部显示源代码,下部为gdb命令行。

安装

CentOS 中使用yum,Ubuntu中使用apt。   关于yum和apt的介绍,在之前的文章中有。

检查软件包列表版本

首先,确保软件包列表是最新的,

sudo yum/apt update

安装

gdb安装

sudo yum/apt install gdb

对于CentOS 8及以上版本

sudo dnf install gdb

cgdb安装

对于Ubuntu,直接安装cgdb即可

sudo apt install cgdb

CentOS默认的软件仓库中没有cgbd,安装需要进行源码编译安装

1.安装依赖

sudo yum install git automake autoconf flex texinfo ncurses-devel

如果是CentOS 8及以上版本

sudo dnf install git automake autoconf flex texinfo ncurses-devel

2.下载cgdb源码

git clone https://github.com/cgdb/cgdb.git

cd cgdb

3.编译和安装

sh autogen.sh

./configure

make

sudo make install

验证安装

gdb/cgdb --version

使用

注意事项

1.可执行的二进制文件才能进行调试

2.只有带调试信息的可执行二进制文件才可以调试,gcc/g++默认以无调试信息的版本发布,使用-g选项可以发布debug版本的可执行程序。

gcc/g++ 源文件 -g 

3.gdb/cgdb 文件名 :进入调试,但只是进入调试,并不会运行程序。

常用命令

cgdb中

:break:在光标所在行设置断点。

/:在源代码窗口中搜索文本。

i:切换到 GDB 命令行窗口。

ESC:切换到源代码窗口。

gdb/cgdb中
1.读取可执行程序格式

readelf -S 文件名

2.列出代码

l/list :显示从文件开始位置的代码,继续输入l/list或者enter会继续向下显示。

l/list 行号:显示指定行号附近的代码

l/list 函数名:显示指定函数的代码

l/list 起始行号,结束行号:显示指定区间代码

l/list 文件名:行号  or  l/list 文件名:函数名     :GDB 会显示指定文件中特定行号或函数的代码。

3.打断点

断点按编号来操作

b 行号

在指定行打断点

b 文件名:函数名/行号

在指定位置打断点


b 行号 if 条件表达式

在指定行打条件断点

condition 断点编号 条件表达式

更改条件断点条件,或者给普通断点加条件

4.删除断点

d 断点编号 

删除断点

 

d breakpoints 

删除所有断点

5.查看断点

info b 

查看断点信息

6.禁用断点

disable 断点编号

禁用指定断点

disable breakpoints 

禁用所有断点


enable 断点标号

启用指定断点

enable breakpoints

启用所有断点

7.查看信息

info b

查看断点信息

info i

查看当前正在debug的程序信息

info local

显示当前函数或作用域中所有局部变量的信息

8.调试

r(run)

开始调试

注:就是启动程序开始运行,如果无断点,会直接运行至程序结束。

n(next)

逐过程调试,不进入函数

s(step)

逐语句调试,进入函数

until 行号

执行到指定行

 

c(continue) 

跳到下一个断点,如果无断点,结束运行

 

finish 

执行到当前函数返回停止


p 变量

查看变量值

p &变量

查看变量地址

display 变量/&变量

设置为常显示

undisplay 编号(display生成的常显示的变量的编号)

取消常显示

 

bt(backtrace)

查看调用堆栈

watch 变量

如果调试中watch变化会通知

set var 变量 = 值

更改此次调试中变量的值,不会修改代码

小知识

1.回车:将光标移动到当前行的开头

2.对于rand这个函数,如果将srand这个设置随机数种子的函数注释掉,只要不重新编译,再次运行产生的随机值不变


http://www.kler.cn/a/600118.html

相关文章:

  • Win98模拟器(安卓):重温经典,一键怀旧
  • 人工智能之数学基础:广义特征值和广义特征向量是什么?
  • idea中快速注释函数
  • pytorch构建线性回归模型
  • 【LInux 维测专栏 1 -- printk extension 介绍】
  • 11-scala多参数列表(柯里化)
  • 小白闯AI:Llama模型Lora中文微调实战
  • Java 代理模式深度解析:从静态到动态的实现与原理
  • 【jvm】垃圾回收的并行和并发
  • 鸿蒙harmonyOS:笔记 正则表达式
  • JVM常用概念之编译器黑洞
  • 数学建模:MATLAB卷积神经网络
  • Langchain 自定义工具和内置工具
  • FRP结合Nginx实现HTTPS服务穿透
  • LVGL移植详细教程(基于STM32F407+rt-thread+FSMC接口屏+V9版本)
  • java 设置操作系统编码、jvm平台编码和日志文件编码都为UTF-8的操作方式
  • 现代化前端异常治理与容灾体系深度解析
  • 本周安全速报(2025.3.18~3.24)
  • VSCODE上ckg_server_linux进程占用CPU过多
  • C++红黑树的深入解析:从理论到实践