C++项目实践git make gdb使用

91 阅读4分钟

C/C++工程实践训练营 第02课

==C/C++ 开发编码时的防御和习惯优于调试和生产问题排查。==

Bug分支 - 廖雪峰的官方网站 (liaoxuefeng.com)

项目

github.com/antirez/sma…

学习目标

==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 -

​ 分支名:账户名/分支类型/功能点

  1. 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 调试代码==

  1. 安装VSCode
  2. 安装一个Linux虚拟机或者 WSL(Windows Subsystem for Linux)
  3. 给 VSCode 安装插件 Remote - SSH 插件,安装好后连接到 Linux 虚拟机或者 WSL 系统
  4. 打开代码所在的目录(需要提前进入代码目录编译出可调试文件);
  5. 创建一个 .vscode 文件夹,在该文件夹下创建 launch.json 文件并配置
  • 项目的组织结构