C/C++工程实践训练营 第02课
==C/C++ 开发编码时的防御和习惯优于调试和生产问题排查。==
Bug分支 - 廖雪峰的官方网站 (liaoxuefeng.com)
项目
学习目标
==1. 基本的 git 命令==
git clone https://gitee.com/zcx11111/smallchat.git mysmallchat
cd mysmallchat
touch 1.txt
ll
git status
git add 1.txt
git add -A //将当前的所有文件add
- ==git pull - -rebase (从远程仓库拉代码)==
git pull --rebase
-
==git 规范(分支规范和 commit message 规范)==
feat: add 1.txt for test //feature 新增功能 fix: xxxxx //修复了bug hotfix: xxxx //补丁包,临时需要修复的 chore: fix typo //修改了一些错别字,单词 test: xxx //测试用例 docs: xxx //文档 merge: xxx //代码从其他地方合过来的 revert: add 1.txt for test//把代码回退掉
完整的Commit message 和 Change log 编写指南参见:www.ruanyifeng.com/blog/2016/0…
git commit -m "feat: add 1.txt for demo"
git push
- ==日志==
git log //显示log日志
git log --oneline //在一行简洁显示
git log --graph //以图形显示
- ==修订提交(有问题)==
vi 2.txt
git add 2.txt
git commit --amend //修改上一次提交记录
git commit --amend --no-edit
git push -f
- ==分支命名==
主干:dev -
分支名:账户名/分支类型/功能点
-
zhangxf/feat/add1TxtForDemo
zhangyl/fix/xxxx
zhangxf/chore/xxx
-
==创建分支==
git branch -b zhangcx/feat/f1 //创建分支(太慢) git checkout -b zhangcx/feat/f1 //创建并切换分支 git checkout -b zhangcx/feat/f2 //若远端没有分支,可以在git push时(git push 不成功时,会有代码提示)加上 git push --set-upstream origin zhangcx/feat/f2 git push --set-upstream origin zhangcx/feat/f2 git checkout -b mybranch1 origin/mybranch1 //将本地分支与远端分支相连 git branch //查看本地分支 git branch -a //查看所有分支(本地和远端) git checkout zhangcx/feat/f1 //切换分支 -
==本地分支与远程分支如何建立连接==
git checkout -b localBranchName origin/remoteBranchName -
==本地分支与远程tag建立连接==
git checkout -b localBranchName tagName -
==入栈出栈==
git stash //可以将上一步git add入栈 git stash pop //将入栈命令弹出 -
==挤压提交记录(p,s)==
git rebase -i HEAD~2 //将最近两次命令挤压 -
==合并分支==
git checkout master git merge zhangcx/feat/f1 -
==cherry-pick 可选择合并不同分支上的内容==
git checkout zhangcx/feat/f1 git log --oneline git checkout master git cherry-pick 9809fda a74956c -
==reset 回溯 ( - - soft|- -mixed|- -hard)==
git checkout master git log --oneline git reset a74956c .... git push -f -
==reflog (所有的总记录)==
git reflog git reset a74956c
- ==git pull --rebase==
==原则:尽量不要把非版本号文件带入代码仓库,可以使用.gitignore文件进行过滤。==
==2.make的使用==
==1.开2个进程来编译==
make -j 2
==2. make clean==
make clean
==3.基础 gdb 的使用==
原则:所有想做好 Linux C/C++开发的同学,在不能熟练使用 gdb 调试的情况下,使用其他替代调试工具,都是歪门邪道。
==gdb常用命令==
==1.启动调试==:gdb
gdb 可执行文件名
gdb --args 可执行文件名 函数参数
r(run)
ctrl+c(将程序停下来)
==1.1运行程序的调试==: gid attach pid
1.当程序已经跑起来了,发现程序出现问题,不想重启程序,以免找不到问题
2.可以先查看该进程id
ps x |grep 进程名
gdb attach pid
c (继续)
ctrl+c(将程序停下来)
.......
detach (退出)
3.程序仍然是继续运行的
==1.2程序调试停在main函数==: s (start)
gdb 可执行文件名
s
==1.3保留断点,重新编译程序==: k (kill)
让 gdb 与运行中的程序脱离并停止对程序文件的使用
(gdb) kill
y
将程序更新掉
run
==2.查看堆栈==: bt (backtrace)
bt
可以查看栈帧编号 n
==3.切换堆栈==: f ( frame) n
f 1
f 0
==4.查看代码==: list (-) (n)
list - n //向上看n行
list n //向下看n行
==5.查看当前程序变量==:p (print) 变量名
p maxfd
==6.加断点==:break 函数名/当前文件行号/文件名:文件行号/命名空间::函数 tbreak加临时断点
b main
b 153
b smallchat-server.c:155
b A::f1
tb main
==7.查看断点信息==:info b (break)
通过断点编号来操纵断点
==8.启动/禁用/删除断点==:enable/disable/delete (断点编号)
disable //禁用所有断点
disable 1 //禁用1号断点
enable //启用所有断点
enable 2 //启用2号断点
delete //删除所有断电
delete 2 //删除2号断点
==9.单步步过==: n (next)
n
==10.进入函数==: s (step)
s
==11.执行完当前函数回到上一层函数==: finish
finish
==12.从当前点直接结束函数执行回到上一层==: return
return
==13.执行到某一行停下来==: until 行号
until 160
==14.让程序继续运行直到遇到断点停下来==:continue
continue
==4. VSCode 调试代码==
- 安装VSCode
- 安装一个Linux虚拟机或者 WSL(Windows Subsystem for Linux)
- 给 VSCode 安装插件 Remote - SSH 插件,安装好后连接到 Linux 虚拟机或者 WSL 系统
- 打开代码所在的目录(需要提前进入代码目录编译出可调试文件);
- 创建一个 .vscode 文件夹,在该文件夹下创建
launch.json文件并配置
- 项目的组织结构