Git版本控制器与GDB/CGDB调试器学习总结
一、Git版本控制器
1.1 安装Git
bash
yum install git
git --version # 查看版本
1.2 在GitHub创建项目
- 登录GitHub,点击左下方的 New repository 按钮
- 输入项目名称,校验通过后点击 Create repository
- 在创建好的项目页面中复制项目链接(HTTPS或SSH)
1.3 下载项目到本地
bash
git clone [url]
1.4 Git三板斧
| 命令 | 作用 |
|---|---|
git add [文件名] |
将文件添加到暂存区,告知Git需要管理 |
git commit -m "日志信息" |
提交改动到本地仓库,必须注明提交日志 |
git push |
同步到远端服务器(GitHub),需输入用户名密码 |
1.5 其他常用命令
| 命令 | 作用 |
|---|---|
git log |
查看提交历史记录 |
git status |
查看当前仓库状态 |
git pull |
从远端拉取最新代码 |
1.8 首次使用配置
bash
git config --global user.name "Your Name"
git config --global user.email you@example.com
1.9 免密码提交
可参考配置SSH密钥或使用凭证助手来实现免密码提交。
二、调试器 - GDB/CGDB
2.1 预备知识
- 程序发布方式有两种:debug模式 和 release模式
- Linux下gcc/g++默认生成的是 release模式 ,不支持调试
- 要使用gdb调试,编译时必须加上
-g选项
bash
# 默认模式(不支持调试)
gcc mycmd.c -o mycmd
# debug模式(支持调试)
gcc mycmd.c -o mycmd -g
# 验证是否包含调试信息
file mycmd # 会显示 "with debug_info"
2.2 GDB基本使用
| 操作 | 命令 |
|---|---|
| 启动调试 | gdb binFile |
| 退出调试 | ctrl+d 或 quit |
2.3 GDB常用命令大全
运行与控制
| 命令 | 简写 | 作用 |
|---|---|---|
run |
r |
从程序开始连续执行 |
continue |
c |
从当前位置继续执行 |
next |
n |
单步执行,不进入函数内部(逐过程,类似F10) |
step |
s |
单步执行,进入函数内部(逐语句,类似F11) |
finish |
- | 执行到当前函数返回后停止 |
until 行号 |
- | 执行到指定行号 |
断点管理
| 命令 | 作用 |
|---|---|
break 行号 / b 行号 |
在指定行设置断点 |
break 文件名:行号 |
在指定文件的指定行设置断点 |
break 函数名 |
在函数开头设置断点 |
info break / info b |
查看所有断点信息 |
delete breakpoints / d |
删除所有断点 |
delete breakpoints n |
删除序号为n的断点 |
disable breakpoints |
禁用所有断点 |
enable breakpoints |
启用所有断点 |
查看与修改变量
| 命令 | 作用 |
|---|---|
print 表达式 / p |
打印表达式的值 |
p 变量名 |
打印指定变量的值 |
set var 变量=值 |
修改指定变量的值 |
display 变量名 |
跟踪显示指定变量(每次停止时自动显示) |
undisplay 编号 |
取消跟踪显示 |
info locals |
查看当前栈帧的局部变量值 |
栈与代码查看
| 命令 | 作用 |
|---|---|
list / l |
显示源代码,每次10行 |
list 行号 |
显示指定行附近的源代码 |
list 函数名 |
列出指定函数的源代码 |
backtrace / bt |
查看当前调用栈 |
2.4 Watch(监视变量变化)
watch 命令用于监视一个表达式(如变量)的值,当值发生变化时GDB会自动暂停:
bash
(gdb) watch result # 监视result变量
(gdb) c # 继续执行
# 当result变化时,GDB会自动暂停并显示新旧值
应用场景:当怀疑某个变量被意外修改导致问题时,可以用watch监控。
2.5 条件断点
方式一:新增时带条件
bash
(gdb) b 9 if i == 30 # 在第9行设置断点,仅当i==30时触发
方式二:给已有断点追加条件
bash
(gdb) condition 2 i==30 # 给2号断点追加条件 i==30(注意没有if)
** 注意**:两种方式语法不同,不要混淆!
2.6 实战示例:定位问题
通过 set var 可以临时修改变量值来验证问题原因:
bash
(gdb) p result # 查看result值为5050
(gdb) p flag # 查看flag值为0(异常)
(gdb) set var flag=1 # 临时修改flag为1
(gdb) n # 继续执行,验证结果是否正确
2.7 CGDB(推荐)
CGDB是GDB的增强版,支持分屏显示源代码,调试体验更好:
bash
# CentOS安装
sudo yum install -y cgdb
# Ubuntu安装
sudo apt-get install -y cgdb
使用技巧:
ESC键:进入代码窗口(可浏览代码)i键:回到GDB命令窗口