一.版本控制器1-1定义所谓的版本控制器就是能让你了解到⼀个⽂件的历史以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统同时也⽅便多⼈协同作业。⽬前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的⽂件例如 doc、excel、dwg、dgn、rvt等等。对于我们开发人员来说。Git 最重要的就是可以帮助我们管理软件开发项⽬中的源代码⽂件1-2背景Git 是目前全球最流行的分布式版本控制系统最初由Linus 创作2005 年之前Linux 内核开发依赖一款名为 BitKeeper 的商业版本控制系统。但好景不长BitKeeper 开发商与 Linux 社区关系破裂收回了免费使用权。没了版本控制Linux 内核开发几乎停摆。Linus Torvalds 于是花 10 天时间从头写了一个新的版本控制系统——Git。如今Git 已成为全球开发者最离不开的工具之一。1-3使用git1-2-1安装 git然后在gitee/github进行仓库的的创建创建好之后然后复制远程仓库的地址这里面使用的时HTTPS比较常用1-2-2克隆到远程仓库一般输入后就会让你登陆你的账号和密码你直接输入你的github或者gitee上的账户和密码之后会在本地直接创建一个放代码的目录。注意我直接用com代替的你直接输入你的链接就行。不要随便修改隐藏文件.git里面包含的内容1-2-3将本地的代码拷贝到仓库当中1-2-4进行三板斧操作1. git add将代码放到刚才下载好的⽬录中git add [⽂件名]将需要⽤ git 管理的⽂件告知 git2. git commit提交改动到本地git commit -m XXX最后的 . 表⽰当前⽬录提交的时候应该注明提交⽇志, 描述改动的详细内容.3. git push同步到远端服务器上git push需要填⼊⽤⼾名密码. 同步成功后, 刷新 Github /Gitee⻚⾯就能看到代码改动了.补充配置免密码提交https://blog.csdn.net/camillezj/article/details/55103149git log //查看所有提交的日志信息 git status //查看本地仓库的所有文件状态 git pull //把远程的最新代码拿过来和我本地的合在一起【其他】二. 调试器 - gdb/cgdb使⽤1-1背景程序的发布⽅式有两种debug 模式和 release 模式 Linux gcc/g 出来的⼆进制程序默认是 release 模式。要使⽤gdb调试必须在源代码⽣成⼆进制程序的时候,加上 -g 选项如果没有添加程序⽆法被编译安装cgdb:• Ubuntu: sudo apt-get install -y cgdb• Centos: sudo yum install -y cgdb1-2基本概念两种模式debug模式在生成可执行程序时会加入调试信息可调试release模式没有调试信息不可以背调试test_debug原本是带调试信息的但后来调试信息被删掉。如果要恢复调试信息需要用-g重新编译。1-3基本操作常用1.开始gdb binFilegdb[目标文件]2.退出ctrl d 或 quit 调试命令3.其他常用的指令举例如下list/l显⽰源代码从上次位置开始每次列出10⾏list/l 10(gdb) list 1 # 从第一行代码开始显示。接着按回车键会继续往下显示代码每次列10行。list/l 函数名列出指定函数的源代码list/l mainlist/l ⽂件名:⾏号列出指定⽂件的源代码list/l mycmd.c:1r/run从程序开始连续执⾏如果没有设置断点就直接运行结束相当于vs当中的F5run(gdb) r Starting program: /home/ll/xxxx/test_debug Breakpoint 1, main () at test.c:7 # 此时来到了第一个断点处第7行 7 for (; i 10; i) {next单步执⾏不进⼊函数内部逐过程 相当于vs当中的F10next(gdb) n 8 sum i; # 单步执行此时来到了第8行s/step单步执⾏进⼊函数内部,逐语句相当于vs中的 F11stepbreak/b [⽂件名:]⾏号在指定⾏号设置断break 10break test.c:10(gdb) b 10 Breakpoint 1 at 0x400543: file test.c, line 10. # 断点1位于0x400543:文件test.c第7行注意• 条件断点添加常⻅两种⽅式1. 新增 2. 给已有断点追加• 注意两者的语法有区别不要写错了。• 新增b ⾏号/⽂件名:⾏号/函数名 if i 30 (条件)• 给已有断点追加 condition 2 i30 其中 2 是已有断点编号没有if• cgbd 分屏操作 Esc 进⼊代码屏 i 回到 gdb 屏break/b 函数名在函数开头设置断点(实际上是打在该函数的第一行break maininfo break/b查看当前所有断点的信息也就是当前设置了那些断电info break(gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0x0000000000400543 in main at test.c:7 # 第7行 2 breakpoint keep y 0x0000000000400555 in main at test.c:10 # 第10行finish执⾏到当前函数返回然后停⽌,输入 finish 可直接结束当前函数调用用此命令可以快速判断一个程序中到底是哪个函数出了 bug此命令在非 main 函数中才有效。finish(gdb) finish Run till exit from #0 Sum (n10) at test.c:4 0x0000000000400609 in main () at test.c:18 18 int sum Sum(n); # 结束Sum函数调用直接返回函数结果 Value returned is $1 55 # Sum函数的返回值print/p 表达式打印表达式的值(gdb) p i $1 3 (gdb) p sum $2 3 (gdb) p i $3 (int *) 0x7fffffffe44c (gdb) p sum $4 (int *) 0x7fffffffe448p /print变量打印指定变量的值,打印表达式的值通过表达式可以修改变量的值或者调用函数print 中可以执行各种表达式。p xset var 变量值修改变量的值假如修改变量 i 的值比如在调试过程中有一个 while语句本来该进去的结果没进去所以我怀疑是不是变量的值有问题就通过这种方式来修改变量的值观察它是否会进入这个 while 语句set var i10continue/c从当前位置开始连续执⾏程序,假如我在最初的位置设置断点要跳到第二个断点执行c直接跳到第二个断点continue(gdb) continue Continuing. Breakpoint 2, main () at test.c:10 # 此时来到了第二个断点处第10行 10 printf(sum %d\n, sum);delete/d breakpoints删除所有断点delete breakpointsdelete/d breakpoints n删除序号为n的断点delete breakpoints 1disable breakpoints禁⽤所有断点disable breakpointsenable breakpoints启⽤所有断点enable breakpointsinfo/i breakpoints查看当前设置的断点列表info breakpointsdisplay 变量名跟踪显⽰指定变量的值每次停⽌时display x(gdb) display i # 跟踪查看变量i 1: i 3 (gdb) display sum # 跟踪查看变量sum 2: sum 3 (gdb) n # 单步调试 7 for (; i 10; i) { 2: sum 6 # 显示变量i的值前面的2:是它的序号 1: i 3 # 显示变量sum的值前面的1:是它的序号undisplay 编号取消对指定编号的变量的跟踪显⽰(gdb) undisplay 2 (gdb) undisplay 1until X⾏号执⾏到指定⾏号until 20backtrace/bt查看当前执⾏栈的各级函数调⽤及参数(类比vs当中查看带调用栈帧backtrace(gdb) bt # 查看调用堆栈main函数上面压的是SUm函数 #0 Sum (n10) at test.c:4 #1 0x0000000000400609 in main () at test.c:18info/i locals查看当前栈帧的局部变量值info locals【补充】watch执⾏时监视⼀个表达式如变量的值。如果监视的表达式在程序运⾏期间的值发⽣变化GDB 会暂停程序的执⾏并通知使⽤。注意如果你有⼀些变量不应该修改但是你怀疑它修改导致了问题你可以watch它如果变化了就会通知你.监视变量的变化三.Ubuntu 更新apt源如果你想直接下载并替换 Ubuntu 22.04 1. 备份现有APT源,以下是具体步骤步骤一先备份现有的APT源配置⽂件阿⾥云源运⾏以下命令下载阿⾥云源配置⽂件sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak步骤二直接下载新的APT源配置⽂件根据你选择的镜像源直接下载并替换配置⽂件阿⾥云源运⾏以下命令下载阿⾥云源配置⽂件sudo wget -O /etc/apt/sources.list http://mirrors.aliyun.com/repo/ubuntu- sources.list清华源运⾏以下命令下载清华源配置⽂件sudo wget -O /etc/apt/sources.list https://mirrors.tuna.tsinghua.edu.cn/ubuntu/sources.list步骤三确保配置⽂件适配Ubuntu 22.04下载的源⽂件可能包含多个Ubuntu版本的配置。你需要确保⽂件中的配置是针对 Ubuntu 20.04(Focal Fossa) 的。打开文件检查sudo nano /etc/apt/sources.list确保每⾏中包含 focal 例如deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse如果⽂件中包含其他版本的配置如 bionic 或 jammy 可以⼿动删除或注释掉。步骤四更新APT缓存替换源⽂件后更新APT缓存sudo apt update步骤五升级系统可选替换源⽂件后更新APT缓存sudo apt upgrade或者全⾯升级包括内核和依赖sudo apt full-upgrade步骤六. 验证APT源可以通过以下命令查看当前的APT源是否⽣效sudo apt policy步骤七 恢复原有APT源可选如果需要恢复原有的APT源可以将备份的⽂件还原udo cp /etc/apt/sources.list.bak /etc/apt/sources.list sudo apt update