在Linux环境下进行C/C++开发,掌握vi/vim编辑器的配置和GDB调试工具的使用是两项必备技能。配置一个舒适的编辑环境可以大幅提升编码效率,而熟练使用调试工具则是解决程序逻辑问题的关键。
今天,我将从vi配置文件修改、主函数参数解析、环境变量获取,到GDB调试的完整流程,全面讲解Linux下C程序开发的核心技能。
一、配置文件的位置与权限
vi/vim的全局配置文件位于 /etc/vim/vimrc,该文件存储了VI编辑器的全局设置。
# 配置文件位置 /etc/vim/vimrc # 查看配置文件(需要管理员权限) sudo cat /etc/vim/vimrc # 编辑配置文件(需要管理员权限) sudo vi /etc/vim/vimrc
权限说明:
- 普通用户只有读取权限,没有修改权限
- 修改全局配置需要使用
sudo提权 - 用户个人配置可放在
~/.vimrc(无需管理员权限)
二、常用配置项
" 显示行号 set nu set number " 设置Tab缩进为4个空格 set tabstop=4 set shiftwidth=4 set expandtab " 自动缩进 set autoindent set smartindent " 高亮搜索 set hlsearch " 显示当前行 set cursorline " 语法高亮 syntax on
三、配置文件的修改方法
# 1. 使用管理员权限打开配置文件 sudo vi /etc/vim/vimrc # 2. 进入插入模式(按 i 键) # 3. 在文件末尾粘贴或输入配置内容 set nu set tabstop=4 set shiftwidth=4 set expandtab set autoindent # 4. 保存并退出(按 ESC → 输入 :wq → 回车)
四、配置后的效果
配置完成后,vi/vim将具备以下功能:
- 行号显示:每行开头显示行号,方便定位
- 自动缩进:敲回车后自动对齐到正确缩进位置
- Tab键展开:Tab键自动转换为4个空格
- 语法高亮:不同类型代码显示不同颜色
扩展建议:
- 可以安装额外插件(如Vundle、Pathogen)增强功能
- 使用vim-plug管理插件,获得类似IDE的体验
一、主函数参数的三种形式
C语言的主函数一般有三种参数形式:
// 形式1:无参数(最常用) int main(void) { return 0; } // 形式2:两个参数(命令行参数) int main(int argc, char* argv[]) { return 0; } // 形式3:三个参数(命令行参数 + 环境变量) int main(int argc, char* argv[], char* envp[]) { return 0; }
参数说明:
参数 类型 作用
argc int 参数个数(包含程序名)
argv[] char*[] 参数字符串数组
envp[] char*[] 环境变量数组
命名规则: 形参名可自定义,但习惯上使用 argc/argv/envp。
二、命令行参数的获取与输出
#include
int main(int argc, char* argv[]) { printf("参数个数: %d ", argc); for (int i = 0; i < argc; i++) { printf("argv[%d] = %s ", i, argv[i]); } return 0; }
参数传递规则:
argc = 1时,默认只传入程序名作为参数argv[0]固定为程序路径和名称- 后续参数依次存入
argv[1]~argv[argc-1] - 所有参数以字符串形式存储在字符指针数组
argv中
三、命令行执行程序的方法
# 1. 编译程序 gcc -o test test.c # 2. 运行程序并传递参数 ./test hello world 123 # 输出: # 参数个数: 4 # argv[0] = ./test # argv[1] = hello # argv[2] = world # argv[3] = 123
路径操作技巧:
- 使用
cd命令进入目标文件夹 - Windows中可使用盘符加冒号(如
d:)快速切换磁盘 - 右键复制文件绝对路径,再粘贴到终端
一、环境变量的概念
环境变量是存储系统或用户定义的配置信息,如 PATH 指定操作系统查找可执行文件的目录顺序。
# 查看所有环境变量 env # 查看单个环境变量 echo $PATH printenv PATH # 设置临时环境变量 export MY_VAR="hello" # 查看设置结果 echo $MY_VAR
二、环境变量的获取
#include
// 方法1:通过主函数的第三个参数获取 int main(int argc, char* argv[], char* envp[]) { int i = 0; while (envp[i] != NULL) { printf("%s ", envp[i]); i++; } return 0; } // 方法2:通过 extern 声明获取 #include
extern char environ; int main() { int i = 0; while (environ[i] != NULL) { printf("%s ", environ[i]); i++; } return 0; } // 方法3:通过 getenv 函数获取特定环境变量 #include
#include
int main()
三、环境变量与主函数参数的区别
特性 环境变量 主函数参数
来源 从父进程继承 终端运行时传递
获取方式
envp[] 或
getenv()
argc/argv[]
本质 字符串形式 字符串形式
使用等效性 功能完全一致 功能完全一致
继承性 子进程继承父进程 不继承
类比说明: 就像100元来源不同(工资或红包),但使用价值相同。
一、调试版本与Release版本的区别
特性 Debug版本 Release版本
调试信息 包含(-g参数) 不包含
代码优化 不优化 高度优化
断点调试 支持 不支持
适用场景 开发调试 正式发布
二、语法错误与调试的区别
错误类型 定义 解决方法
语法错误 代码不符合语言规范 直接查看报错信息,修改代码
逻辑错误 程序能运行但结果不对 需要调试定位
运行时错误 程序崩溃 需要调试定位
调试的适用条件:
- 程序必须能通过编译,生成可执行文件
- 语法错误无法通过调试解决,必须先修正代码
- 调试的核心目的是定位运行时错误和逻辑错误
gdb安装
三、GDB基本命令
四、GDB调试流程
# 1. 编译带调试信息的程序 gcc -g test.c -o test # 2. 启动GDB gdb ./test # 3. 设置断点 (gdb) b main # 在main函数设置断点 (gdb) b 10 # 在第10行设置断点 (gdb) info break # 查看断点 # 4. 运行程序 (gdb) r # 运行到第一个断点 # 5. 单步调试 (gdb) n # 单步执行 (gdb) s # 进入函数 (gdb) p sum # 打印变量sum的值 # 6. 继续执行 (gdb) c # 继续执行到下一个断点 # 7. 查看调用栈 (gdb) bt # 查看函数调用链 # 8. 退出 (gdb) q
五、调试示例:字符串比较问题
#include
#include
int main() else { printf("执行命令: %s", input); } return 0; }
调试过程:
# 编译 gcc -g test.c -o test # 启动GDB gdb ./test # 设置断点 (gdb) b main # 运行 (gdb) r # 输入命令 (gdb) n # 多次单步执行到strcmp # 查看变量 (gdb) p input # 输出:$1 = "quit "(包含换行符) # 发现问题:strcmp比较时"quit" != "quit "


解决方案:
// 去除末尾换行符 input[strcspn(input, " ")] = '0';
六、GDB命令速查表
命令 简写 作用
list
l 显示代码
break
b 设置断点
info break
i b 查看断点
delete
d 删除断点
run
r 运行程序
next
n 单步执行(不进入函数)
step
s 单步执行(进入函数)
continue
c 继续执行
print
p 打印变量值
backtrace
bt 查看调用栈
finish - 跳出当前函数
quit
q 退出GDB
一、vi/vim配置核心要点
配置项 作用 命令 显示行号 便于定位
set nu Tab缩进 统一缩进风格
set tabstop=4 自动缩进 提升编码效率
set autoindent 语法高亮 增强可读性
syntax on
二、主函数参数核心要点
参数 含义 示例
argc 参数个数
./test hello → 2
argv[0] 程序名
./test
argv[1] 第一个参数
hello
envp[] 环境变量
PATH=/usr/bin
三、GDB调试核心要点
阶段 操作 命令 编译 生成调试信息
gcc -g 启动 进入GDB
gdb ./program 断点 设置/查看
b,
info break 运行 开始调试
r 单步 逐行执行
n,
s 观察 查看变量
p 退出 退出GDB
q
掌握vi/vim配置和GDB调试是Linux下C/C++开发的重要技能。
学习建议:
配置个性化的vi/vim环境,提高编码效率
理解主函数参数和环境变量的作用 熟练使用GDB常用命令 调试时先确认程序能编译通过 通过断点、单步执行、打印变量定位问题
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/276377.html