Linux基础开发工具

发布于:2025-08-10 ⋅ 阅读:(28) ⋅ 点赞:(0)

1.软件包和软件包管理器

1.1软件包

软件包(Package)是一种将软件程序、相关配置文件、依赖信息等文件打包在一起的归档文件格式,用于在操作系统中便捷地进行软件的分发、安装、升级和卸载。

简单来说,软件包就像一个 "压缩包",里面包含了运行某个软件所需要的所有文件:

  • 可执行程序(二进制文件)
  • 配置文件(如设置参数的文件)
  • 帮助文档、手册页
  • 依赖关系信息(该软件运行需要哪些其他组件)

不同的 Linux 发行版有不同的软件包格式,例如:

  • Debian/Ubuntu 使用.deb格式
  • Red Hat/CentOS 使用.rpm格式
  • Arch Linux 使用.pkg.tar.xz格式

软件包的存在让软件管理变得标准化:用户无需手动编译源代码,只需通过包管理器(如 apt、yum 等)就能自动处理软件的安装路径、依赖关系等复杂问题,极大降低了软件使用门槛。

1.2软件包管理器

在 Linux 系统中,软件包管理器是一种用于自动化软件的安装、升级、卸载和管理的工具。它能够解决软件之间的依赖关系,确保软件正确安装并正常运行,极大简化了用户管理软件的过程。

不同的 Linux 发行版通常采用不同的软件包管理器,常见的有:

  1. Debian/Ubuntu 系列:使用dpkg作为底层包管理工具,配合apt(Advanced Package Tool,如apt-getapt-cache)作为前端工具,管理.deb格式的软件包。

  2. Red Hat/CentOS 系列:使用rpm作为底层包管理工具,配合yum(Yellowdog Updater Modified)或dnf(Dandified YUM)作为前端工具,管理.rpm格式的软件包。

  3. Arch Linux 系列:使用pacman作为包管理工具,管理.pkg.tar.xz等格式的软件包,以滚动更新为特色。

  4. SUSE/openSUSE 系列:主要使用zypper作为包管理工具,同样基于rpm包格式。

这些工具不仅能从官方软件仓库获取软件,还能管理第三方仓库,让用户便捷地获取和维护系统中的各类应用程序。

1.3软件包和软件包管理器的关系

软件包管理器和软件包是相互依存、协同工作的关系,二者共同构成了 Linux 系统中软件管理的核心机制:

  1. 软件包是管理对象,软件包管理器是管理工具
    软件包是包含软件程序、配置文件、依赖信息的归档文件(如.deb.rpm),是被管理的 "内容";而软件包管理器是操作这些软件包的工具(如aptyum),负责处理软件的安装、卸载、升级等流程。

  2. 软件包管理器依赖软件包的标准化格式
    软件包必须遵循特定格式(如 Debian 系的.deb)才能被对应的包管理器识别。包管理器通过解析软件包内的元数据(如依赖关系、安装路径),实现自动化处理。

  3. 软件包的生命周期由包管理器掌控

    • 安装时:包管理器解析软件包的依赖关系,自动下载并安装所需的其他软件包;
    • 运行时:包管理器记录软件包的安装位置和文件清单,便于后续管理;
    • 升级 / 卸载时:包管理器通过比对软件包版本、追踪关联文件,确保操作的完整性(如卸载时不会残留冗余文件)。

简单来说,软件包是 "食材",软件包管理器是 "厨师"—— 前者提供原材料,后者负责处理加工,二者配合让软件管理变得高效且可靠。

2.yum前端包管理器

yum 的核心功能和特点包括:

  1. 自动处理依赖关系
    安装软件时,yum 会自动分析该软件所需的其他依赖包,并一次性下载安装所有必要组件,无需用户手动逐个处理依赖。

  2. 基于软件仓库(Repository)工作
    yum 通过配置文件(通常位于 /etc/yum.repos.d/ 目录)定义软件仓库地址,从仓库中获取软件包信息和文件,而非直接操作本地 RPM 包。

  3. 简化软件管理流程
    提供简洁的命令集,例如:

    • yum install 包名:安装软件包
    • yum update 包名:升级软件包(不加包名则升级系统中所有可更新包)
    • yum remove 包名:卸载软件包
    • yum search 关键词:搜索软件包

2.1查看软件包操作

ubuntu:
apt search lrzsz
  • 软件包名:主版本号.次版本号.源程序发⾏号-软件包的发⾏号.主机平台.cpu架构.
  • 架构x86_64,表示该软件包适用于 64 位的 x86 架构的系统, 目前大多数常见的服务器和个人计算机(如基于 Intel 或 AMD 处理器的设备)都采用这种架构。
  • 版本号0.12.20-36.el7,其中 0.12.20 是软件自身的版本号, 代表了软件的功能特性、修复的问题等;36 是软件包在 CentOS 7 系统的软件仓库中被打包时的构建次数 ,意味着这个版本的软件包在仓库中经过了 36 次的构建调整;el7 表示该软件包是为 Enterprise Linux 7(即 CentOS 7,CentOS 是基于 RHEL 源码构建的社区版系统 )系统设计的。
  • 仓库@os ,这表明该软件包来自于系统默认的基础软件仓库 ,在 CentOS 7 中,默认会配置一些官方提供的软件仓库,用于提供系统运行和常见软件安装所需的软件包,可以类比于各种型号手机上自带的应用商店。

2.2安装软件

以安装gcc为例

  1. 检查网络连接
    确保服务器或系统已经正确连接到互联网,因为yum需要从软件仓库下载gcc及其依赖包。
  2. 安装gcc
    打开终端,以普通用户或者拥有sudo权限的用户身份执行以下命令:
sudo yum install gcc

执行上述命令后,yum会自动解析gcc的依赖关系,列出将要安装的软件包列表,并询问是否继续安装,输入y然后按回车键确认安装。

注意:
  • 安装软件需要拥有sudo权限的普通用户,和root用户才能完成
  • yum/apt安装软件只能⼀个装完了再装另⼀个. 正在yum/apt安装⼀个软件的过程中, 如果再尝试⽤yum/apt安装另外⼀个软件, yum/apt会报错.

2.3卸载软件

卸载单个软件包
假设要卸载 httpd 软件包,以具有 sudo 权限的用户身份

sudo yum remove httpd

执行该命令后,yum 会列出将要卸载的软件包以及其依赖项,询问是否继续,输入 y 并回车即可开始卸载。

同时卸载多个软件包
如果要同时卸载 httpd 和 php ,可以执行:

sudo yum remove httpd php

注意:关于 yum / apt 的所有操作必须保证主机(虚拟机)⽹络畅通!!!
 

安装源路径:

$ ll /etc/yum.repos.d/
total 16
-rw-r--r-- 1 root root 676 Oct 8 20:47 CentOS-Base.repo # 标准源
-rw-r--r-- 1 root root 230 Aug 27 10:31 epel.repo # 扩展源

3.编辑器vim

vim键位图

3.1vim基本概念

Vim 是一款功能强大、高度可定制的文本编辑器,最初是作为 Vi 编辑器的增强版本开发的,在 Linux、Unix 等操作系统中广泛使用

工作模式

Vim 有三种基本工作模式,这是 Vim 区别于其他常规文本编辑器的重要特性,不同模式下键盘按键执行不同功能:

  • 命令模式(Normal mode):启动 Vim 后默认进入该模式。此模式下,可以使用各种快捷键进行文本的浏览、复制、粘贴、删除、查找替换等操作,比如dd删除一行,yy复制一行,p粘贴文本,/进行文本查找 。
  • 插入模式(Insert mode):用于输入文本内容。从命令模式按下i(在光标前插入)、a(在光标后插入)、o(在当前行下方新建一行插入)等按键可进入插入模式,在该模式下,Vim 的操作与普通文本编辑器类似,通过键盘输入文字内容,按下Esc键可返回命令模式。
  • 可视化模式(Visual mode):用于可视化地选择文本块。按下v进入字符可视化模式,可逐个字符选择文本;按下V(大写 V)进入行可视化模式,可按行选择文本;按下Ctrl + v进入块可视化模式,可选择矩形文本块。选择好文本后,可对选中的文本块进行复制、删除、替换等操作。

查找替换

  • 查找:在命令模式下,使用/ 加上要查找的内容(例如/hello),然后按回车键,Vim 会从当前光标位置开始向后查找匹配的文本;使用?加上要查找的内容则是向前查找。
  • 替换:s/old/new 命令用于将当前行中第一个匹配到的old替换为new:s/old/new/g 则将当前行中所有匹配到的old替换为new:n,m s/old/new/g 可以将从第n行到第m行中所有匹配到的old替换为new: % s/old/new/g 可以将整个文件中所有匹配到的old替换为new

配置文件

Vim 的配置文件为.vimrc,一般位于用户主目录下(~/.vimrc),系统级的配置文件则在/etc/vim/vimrc。用户可以通过编辑.vimrc 文件来自定义 Vim 的行为,比如设置显示行号(set number)、启用语法高亮(syntax on)、自定义快捷键等 ,以满足个性化的编辑需求。

3.2vim命令介绍

1.命令模式

打开vim默认在命令模式下

  • i  :命令模式进入插入模式
  • esc :任何模式下按esc都会进入命令模式
  • ‘:’  :命令模式进入底行模式  

光标移动命令:

  • ‘G’ :光标移动到文本结尾。
  • gg :回到文本的开始。
  • 10+G: 光标移动到文本的第10行。
  • ‘$’ :光标定位到当前行行尾.
  • '^' :光标定位到当前行的开始。
  • 'h' 'j' 'k' 'l' :左下上右。
  • ‘w’ :按单词为单位使光标向右移动
  • ‘b ’ :按单词为单位使光标向左移动
  • '数字+w/b' ;按数字个单词为单位移动

复制粘贴:

  • 'yy' :复制
  • ‘p’ :粘贴到当前行的下一行
  • 'u' :撤销操作。
  • 数字+p’:粘贴数字个数已复制的内容
  • ‘数字+yy’ :复制数字行。
  • ‘dd’:删除当前行
  • ‘数字+dd’:删除数字行数
  • ‘dd+p’ : 剪切
  • "ctrl+r" : 对u的撤销进行撤销,也可以反过来
  • "shift按住+~" : 大小写相互转换
  • 'r' :替换光标所在位置的一个字符

  • '数字+r':替换光标后数字个位置的字符替换
  • ‘shift+r’:进入替换模式,进行批量的内容替换

删除:

  • ‘x’ :删除光标所在字符,连续按x向右删除
  • 'shift+x' :删除光标所在字符,连续按x向左删除
  • '数字+x':删数字个字符
  • 'ctrl+v' :进入视图模式,hjkl选中区域,(d直接删除选中区域的内容)shift+i,输入//,esc自动把选择的区域注释掉
  • 视图模式:说白了就是选择区域(选中区域后输入你要进行的操作(这个操作可以是上述的各种命令)就会对区域内容进行操作),对该区域进行批量化操作

2.底行模式

  • “set nu” :调出行号
  • ‘!’ :强制
  • 'w' :保存
  • 'q' :退出
  • “/+字符串” :把文本中包含该字符串的高亮,用n可以移动光标。
  • “!+黑框命令” :可以执行命令,当然也可以直接对代码进行编译和运行,%s(替换)/字符换1/字符串2/g(全部替换):把文本中的字符串1替换为字符串2。
  • vs+文件名:创建新文件,同时分屏,进行多文件同时编辑

  • ctrl+ww :进入另一个屏进行编辑

多文件编译:g++ code.c main.c -o code(头文件不用加)

当vim退出时,再次打开光标还在原来位置

Vim code.c +n:进入文件后光标从第一行+n行

4.编辑器gcc/g++

4.1gcc与g++简单介绍

    gcc(GNU Compiler Collection,GNU 编译器套件 )和g++都是 GNU 项目中非常重要的编译器,在 Linux 和类 Unix 系统以及 Windows(通过 MinGW 等工具)环境中广泛使用

gcc

  • 本质与功能gcc 最初是作为 GNU C 语言编译器开发的,随着发展,它逐渐支持多种编程语言,如 C、C++(通过调用相关库和预处理机制 )、Objective-C、Fortran、Ada 等。它能将高级语言编写的源程序经过预处理、编译、汇编和链接等一系列过程,转换为可执行程序或目标文件。
  • 编译流程
    • 预处理:执行以#开头的预处理指令,如#include(包含头文件)、#define(宏定义替换)等,生成预处理后的文件,通常以.i为扩展名。可以使用gcc -E选项指定只进行预处理步骤,例如gcc -E main.c -o main.i
    • 编译:将预处理后的文件编译为汇编语言代码,生成以.s为扩展名的汇编文件。使用gcc -S选项,如gcc -S main.i -o main.s
    • 汇编:把汇编语言代码转换为机器可识别的目标代码,生成以.o为扩展名的目标文件。使用gcc -c选项,如gcc -c main.s -o main.o
    • 链接:将多个目标文件以及所需的库文件链接在一起,生成可执行文件。默认情况下,gcc会自动完成这一系列流程,如gcc main.c -o main,将main.c编译并链接成名为main的可执行文件。
  • 应用场景:主要用于编译纯 C 语言编写的程序,像一些系统底层工具、小型嵌入式系统的程序开发等。

g++

  • 本质与功能g++是 GNU 的 C++ 编译器,它专门针对 C++ 语言进行了优化和扩展,全面支持 C++ 的特性,如类、对象、继承、多态、模板等 。除了具备gcc编译 C 语言的能力外,它还能处理 C++ 特有的语法和库,在链接时会自动链接 C++ 标准库(如libstdc++ ),以支持 C++ 程序的运行。
  • 与 gcc 的区别:在编译 C++ 程序时,虽然gcc也可以通过添加参数(如-lstdc++手动链接 C++ 标准库 )来完成编译,但g++更为方便和自动化。例如,使用g++ main.cpp -o main可以直接将main.cpp(C++ 源文件)编译并链接成可执行文件main ,而使用gcc编译相同的 C++ 源文件,通常需要明确指定链接 C++ 标准库,如gcc main.cpp -o main -lstdc++ 。此外,在处理 C++ 特有的一些符号和名称修饰等方面,g++的处理更加准确和完善。
  • 应用场景:主要用于编译 C++ 语言编写的程序,如大型应用程序开发(像数据库管理系统、游戏引擎等)、服务器端程序开发(如 Web 服务器后端程序 )等。

4.2gcc选项

格式 gcc [选项] 要编译的⽂件 [选项] [⽬标⽂件]
预处理(进⾏宏替换)
  • 预处理功能主要包括宏定义,⽂件包含,条件编译,去注释等。
  • 预处理指令是以#号开头的代码⾏。
  • 实例: gcc –E hello.c –o hello.i
  • 选项“-E”,该选项的作⽤是让 gcc 在预处理结束后停⽌编译过程。
  • 选项“-o”是指⽬标⽂件,“.i”⽂件为已经过预处理的C原始程序。
编译(⽣成汇编)
  • 在这个阶段中,gcc ⾸先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的⼯作,在检查⽆误后,gcc 把代码翻译成汇编语⾔。
  • ⽤⼾可以使⽤“-S”选项来进⾏查看,该选项只进⾏编译⽽不进⾏汇编,⽣成汇编代码。
  • 实例: gcc –S hello.i –o hello.s
汇编(⽣成机器可识别代码)
  • 汇编阶段是把编译阶段⽣成的“.s”⽂件转成⽬标⽂件
  • 读者在此可使⽤选项“-c”就可看到汇编代码已转化为“.o”的⼆进制⽬标代码了
  • 实例: gcc –c hello.s –o hello.o
连接(⽣成可执⾏⽂件或库⽂件)
  • 在成功编译之后,就进⼊了链接阶段。
  • 实例: gcc hello.o –o

4.3gcc其他常用选项

  • -E 只激活预处理,这个不⽣成⽂件,你需要把它重定向到⼀个输出⽂件⾥⾯
  • -S 编译到汇编语⾔不进⾏汇编和链接
  • -c 编译到⽬标代码
  • -o ⽂件输出到 ⽂件
  • -static 此选项对⽣成的⽂件采⽤静态链接
  • -g ⽣成调试信息。GNU 调试器可利⽤该信息。
  • -shared 此选项将尽量使⽤动态库,所以⽣成⽂件⽐较⼩,但是需要系统由动态
  • -O0
  • -O1
  • -O2
  • -O3 编译器的优化选项的4个级别,-O0表⽰没有优化,-O1为缺省值,-O3优化级别最⾼
  • -w 不⽣成任何警告信息。
  • -Wall ⽣成所有警告信息。

5.调试器-gdb/cgdb

1.gdb 与 cgdb 简介

gdb

gdb 是 GNU 调试器(GNU Debugger)的缩写,它是一个功能强大的命令行调试工具,支持多种编程语言,如 C、C++、Objective-C 等。通过 gdb,开发者可以在程序运行过程中设置断点、查看变量值、单步执行程序等,从而找出程序中的错误。

cgdb

cgdb 是 gdb 的一个增强版,它在 gdb 的基础上增加了一个可视化的界面,将代码窗口和调试命令窗口分开显示,使得调试过程更加直观。cgdb 完全兼容 gdb 的命令,对于熟悉 gdb 的用户来说,上手 cgdb 非常容易。

2.安装 gdb 和 cgdb

安装 gdb

在大多数 Linux 发行版中,gdb 可能已经预装。如果没有安装,可以使用以下命令进行安装:

  • Ubuntu/Debian 系统:sudo apt-get install gdb
  • CentOS/RHEL 系统:sudo yum install gdb

安装完成后,可以通过gdb --version命令查看 gdb 的版本信息,确认安装成功。

安装 cgdb

cgdb 的安装相对复杂一些,不同的 Linux 发行版安装命令有所不同:

  • Ubuntu/Debian 系统:sudo apt-get install cgdb
  • CentOS/RHEL 系统:需要先安装一些依赖库,然后从源码编译安装。具体步骤可以参考 cgdb 的官方文档。

安装完成后,输入cgdb --version命令,若能显示版本信息,则说明安装成功。

3.准备调试环境

在开始调试前,我们需要一个测试程序。创建一个名为test.c的文件

#include <stdio.h>

// 计算1到n的和
int sum(int n) {
    int result = 0;
    for (int i = 1; i <= n; i++) {
        result += i;
    }
    return result;
}

int main() {
    int num = 5;
    int total = sum(num);
    printf("Sum from 1 to %d is: %d\n", num, total);
    
    num = 10;
    total = sum(num);
    printf("Sum from 1 to %d is: %d\n", num, total);
    
    return 0;
}

编译带有调试信息的程序:
gcc -g test.c -o test

4.gdb 的使用方法

启动 gdb

gdb test

启动后,终端会显示 gdb 的版本信息和一些提示信息,进入 gdb 的命令行界面。

常用 gdb 命令及示例

1. 运行程序
  • 命令run [参数] 或 r [参数]
  • 功能:启动程序,如果有参数可以直接传递
(gdb) run
Starting program: /home/user/test 
Sum from 1 to 5 is: 15
Sum from 1 to 10 is: 55
[Inferior 1 (process 12345) exited normally]
2. 设置断点
  • 命令break 位置 或 b 位置
    • 位置可以是行号:b 行号
    • 位置可以是函数名:b 函数名
    • 位置可以是文件名:行号:b 文件名:行号
  • 功能:在指定位置设置断点
(gdb) b test.c:5    # 在test.c第5行设置断点
Breakpoint 1 at 0x555555555159: file test.c, line 5.

(gdb) b sum         # 在sum函数入口设置断点
Breakpoint 2 at 0x555555555154: file test.c, line 4.
3. 查看断点信息
  • 命令info breakpoints 或 info b
  • 功能:显示所有已设置的断点信息
(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000555555555159 in sum at test.c:5
2       breakpoint     keep y   0x0000555555555154 in sum at test.c:4
4. 删除断点
  • 命令delete 断点编号 或 d 断点编号
  • 功能:删除指定编号的断点
(gdb) delete 1    # 删除编号为1的断点
(gdb) info b
Num     Type           Disp Enb Address            What
2       breakpoint     keep y   0x0000555555555154 in sum at test.c:4
5. 禁用 / 启用断点
  • 命令disable 断点编号 / enable 断点编号
  • 功能:暂时禁用或重新启用断点
(gdb) disable 2    # 禁用断点2
(gdb) info b
Num     Type           Disp Enb Address            What
2       breakpoint     keep n   0x0000555555555154 in sum at test.c:4

(gdb) enable 2     # 启用断点2
(gdb) info b
Num     Type           Disp Enb Address            What
2       breakpoint     keep y   0x0000555555555154 in sum at test.c:4
6. 单步执行(进入函数)
  • 命令step 或 s
  • 功能:执行下一行代码,如果是函数调用则进入函数内部
(gdb) run
Starting program: /home/user/test 

Breakpoint 2, sum (n=5) at test.c:4
4       int sum(int n) {
(gdb) s    # 进入函数内部执行下一行
5           int result = 0;
(gdb) s    # 执行下一行
6           for (int i = 1; i <= n; i++) {
7. 单步执行(不进入函数)
  • 命令next 或 n
  • 功能:执行下一行代码,如果是函数调用则直接执行完整个函数
(gdb) run
Starting program: /home/user/test 

Breakpoint 1, main () at test.c:14
14      int main() {
(gdb) n
15          int num = 5;
(gdb) n
16          int total = sum(num);  # 这是一个函数调用
(gdb) n                          # 使用next不会进入sum函数
17          printf("Sum from 1 to %d is: %d\n", num, total);
8. 继续执行
  • 命令continue 或 c
  • 功能:从当前位置继续执行程序,直到遇到下一个断点或程序结束
(gdb) c
Continuing.
Sum from 1 to 5 is: 15

Breakpoint 2, sum (n=10) at test.c:4
4       int sum(int n) {
9. 查看变量值
  • 命令print 变量名 或 p 变量名
  • 功能:显示指定变量的当前值
(gdb) p n    # 查看变量n的值
$1 = 5
(gdb) p result  # 查看变量result的值
$2 = 0
(gdb) p i       # 查看变量i的值
$3 = 1
10. 设置变量值
  • 命令set variable 变量名=值 或 set var 变量名=值
  • 功能:在调试过程中修改变量的值
(gdb) p n
$4 = 5
(gdb) set var n=6    # 修改n的值为6
(gdb) p n
$5 = 6
11. 查看函数调用栈
  • 命令backtrace 或 bt
  • 功能:显示当前的函数调用栈,即程序执行到当前位置所调用的函数序列
(gdb) bt
#0  sum (n=5) at test.c:6
#1  0x00005555555551e9 in main () at test.c:16
12. 切换栈帧
  • 命令frame 帧编号 或 f 帧编号
  • 功能:切换到指定的栈帧,以便查看不同函数中的变量
(gdb) f 1    # 切换到栈帧1(main函数)
#1  0x00005555555551e9 in main () at test.c:16
16          int total = sum(num);
(gdb) p num  # 查看main函数中的num变量
$6 = 5
13. 查看源代码
  • 命令list 或 l
    • l:显示当前行附近的代码
    • l 行号:显示指定行附近的代码
    • l 函数名:显示指定函数的代码
  • 功能:查看程序源代码
(gdb) l sum    # 显示sum函数的代码
1       #include <stdio.h>
2       
3       // 计算1到n的和
4       int sum(int n) {
5           int result = 0;
6           for (int i = 1; i <= n; i++) {
7               result += i;
8           }
9           return result;
10      }
14. 退出 gdb
  • 命令quit 或 q
  • 功能:退出 gdb 调试环境
(gdb) q
A debugging session is active.

    Inferior 1 [process 12345] will be killed.

Quit anyway? (y or n) y

五、cgdb 的使用方法

启动 cgdb

cgdb test

cgdb 启动后,界面分为上下两部分,上部分显示程序的源代码,下部分是 gdb 的命令行界面,和 gdb 的命令行操作方式类似。

cgdb 特有的操作

1. 窗口切换
  • 命令Ctrl + L
  • 功能:在代码窗口和命令行窗口之间切换焦点
  • 示例
    • Ctrl + L后,光标会从命令行窗口移动到代码窗口,反之亦然
2. 代码导航
  • 命令:方向键(上、下、左、右)
  • 功能:在代码窗口中移动光标,浏览源代码
  • 示例
    • 使用上下方向键可以滚动代码
    • 使用左右方向键可以在当前行内移动光标
3. 代码搜索
  • 命令/搜索内容
  • 功能:在代码窗口中搜索指定内容
  • 示例
    • 在代码窗口中输入/sum,然后按回车,会高亮显示所有 "sum" 字符串
    • n键可以跳到下一个匹配项,按N键可以跳到上一个匹配项
4. 快速设置断点
  • 命令:在代码窗口中移动光标到目标行,按b
  • 功能:在当前光标所在行设置断点
  • 示例
    • 在代码窗口中将光标移动到第 16 行
    • b键,会在该行设置一个断点,并在代码左侧显示断点标记
5. 全屏切换
  • 命令Ctrl + X, Ctrl + A
  • 功能:切换全屏显示代码窗口或命令行窗口
  • 示例
    • Ctrl + X后再按Ctrl + A,可以只显示代码窗口
    • 再次执行该命令,恢复分屏显示

cgdb 中的 gdb 命令

由于 cgdb 完全兼容 gdb 的命令,所以在 cgdb 的命令行窗口中,可以使用所有 gdb 的命令,操作方法和在 gdb 中一样。

(gdb) b main
Breakpoint 1 at 0x5555555551d5: file test.c, line 14.
(gdb) r
Starting program: /home/user/test 

Breakpoint 1, main () at test.c:14
14      int main() {
(gdb) n
15          int num = 5;
(gdb) p num
$1 = 5

6.gdb 与 cgdb 的对比

  1. 界面差异:gdb 是纯命令行界面,所有操作都通过命令完成;cgdb 具有可视化界面,将代码和命令行分开显示,更直观。
  2. 操作便捷性:在设置断点等操作上,cgdb 通过在代码窗口中直接操作,比 gdb 的命令方式更便捷。
  3. 兼容性:cgdb 完全兼容 gdb 的命令,熟悉 gdb 的用户可以无缝切换到 cgdb。

7.总结

gdb 和 cgdb 都是 Linux 系统中非常优秀的调试工具,gdb 作为经典的命令行调试器,功能强大,适合熟悉命令行操作的用户;cgdb 在 gdb 的基础上增加了可视化界面,使得调试过程更加直观,操作也更便捷。新手可以根据自己的习惯选择使用,建议先从 gdb 入手,熟悉基本的调试命令后,再尝试使用 cgdb,以提高调试效率。