1. 版本控制器Git
1.1 Git的簡史
Git 的歷史可以追溯到 2005 年1。當時 Linux 內核項目的開發團隊一直使用 BitKeeper 進行版本管理,但由于一位 Linux 開發成員寫了一個連接 BitKeeper 倉庫的外掛,BitMover 公司決定中止 Linux 免費使用 BitKeeper 的授權1。Linux 團隊與 BitMover 磋商無果后,Linux 內核的創始人 Linus Torvalds 決定開發自己的版本管理系統1。
2005 年 4 月 3 日,Linus Torvalds 正式開始開發 Git3。僅僅四天后,他就發布了 Git 的第一個可用版本(0.1),這個初始版本包含了 Git 的核心功能3。在接下來的幾周內,Linus 和其他早期貢獻者對 Git 進行了快速迭代和改進,逐步完善了其穩定性和功能3。
Git 的設計目標是實現分布式開發,解決現有集中式版本控制工具(如 CVS、Subversion)性能低下、分支管理不靈活以及依賴中央服務器等問題3。它具有所有行為都要校驗、操作必須在毫秒級內完成等特性1。
隨著開發的深入,Git 逐漸被大眾接受1。2008 年 2 月,為 Git 提供托管服務的 GitHub 上線,進一步推動了 Git 的廣泛應用1。此后,Git 成為了世界上最流行的分布式版本控制系統之一,被大量的初創企業、集體企業和跨國公司用于維護軟件項目的源代碼2。
1.2 Git的操作(以下操作是在Centos環境進行的)
1.2.1 安裝 git
yum install git
1.2.2 在gitee創建項目
登錄gitee創建倉庫在創建好的項目頁面中復制項目的鏈接, 以備接下來進行下載
下載項目到本地?
創建好一個放置代碼的目錄
git clone [url]
這里的url就是剛剛創建好的項目鏈接?
?1.2.3 git add
git add
?命令是一個非常重要的操作,它的主要作用是將工作目錄中修改過的文件或新建的文件,添加到暫存區(也稱為 “索引”,英文為index
),以便后續提交到版本庫中。
git add [文件名]
1.2.4 git commit
git commit
?命令用于將暫存區(staging area
?,也叫索引?index
)的內容提交到本地版本庫,形成一個新的提交對象。
git commit -m "xxx"
提交的時候應該注明提交日記, 描述改動的詳細內容.?
1.2.5 git push
?git push
?命令用于將本地版本庫中分支的提交推送到遠程倉庫,使得本地的代碼變更可以與團隊成員共享,或者備份到遠程服務器上。
git push
需要填?用戶名密碼. 同步成功后, 刷新 gitee?頁?就能看到代碼改動了.?
git提交的時候,只會提交變化的部分!?
1.2.6 git pull
git pull
?是一個常用命令,它主要用于從遠程倉庫獲取最新代碼,并自動嘗試將獲取到的代碼合并到本地當前分支 ,在團隊協作和多設備開發場景中發揮著重要作用。
git pull [文件名]
1.2.7 其他
git log //查看倉庫的提交歷史記錄。
git status
顯示工作目錄、暫存區(也稱為 “索引”)和本地倉庫之間的狀態差異。它能直觀地告訴你哪些文件被修改、哪些被添加到暫存區、哪些是未被跟蹤的新文件,幫助你在提交代碼前了解當前工作進度。?
.ignore
?.gitignore
?是一個至關重要的配置文件,用于指定 Git 應該忽略哪些文件或目錄,避免它們被納入版本控制。這在實際開發中非常實用,比如可以忽略自動生成的文件、編譯產物、日志文件等無需版本管理的內容。
2.??調試器 - gdb/cgdb使用
2.1 樣例代碼
// mycmd.c
#include <stdio.h>
int Sum(int s, int e)
{int result = 0;for(int i = s; i <= e; i++){result += i;}return result;
}int main()
{int start = 1;int end = 100;printf("I will begin\n");int n = Sum(start, end);printf("running done, result is: [%d-%d]=%d\n", start, end, n);return 0;
}
2.2 預備
2.3 常見使用






命令 | 作? | 樣例 |
list/l | 顯?源代碼,從上次位置開始,每次列出 10? | list/l 10 |
list/l 函數名 | 列出指定函數的源代碼 | list/l main |
list/l ?件名:?號 | 列出指定?件的源代碼 | list/l mycmd.c:1 |
r/run | 從程序開始連續執? | run |
n/next | 單步執?,不進?函數內部 | next |
s/step | 單步執?,進?函數內部 | step |
break/b [?件名:]?號 | 在指定?號設置斷點 | break 10 break test.c:10 |
break/b 函數名 | 在函數開頭設置斷點 | break main |
info break/b | 查看當前所有斷點的信息 | info break |
finish | 執?到當前函數返回,然后停? | finish |
print/p 表達式 | 打印表達式的值 | print start+end |
p 變量 | 打印指定變量的值 | p x |
set var 變量=值 | 修改變量的值 | set var i=10 |
continue/c???????? | 從當前位置開始連續執?程序,直到遇到下一個斷點或程序結束 | continue |
delete/d breakpoints | 刪除所有斷點 | delete breakpoints |
delete/d breakpoints n | 刪除序號為n的斷點 | delete breakpoints 1 |
disable breakpoints | 禁?所有斷點 | disable breakpoints |
enable breakpoints | 啟?所有斷點 | enable breakpoints |
info/i breakpoints | 查看當前設置的斷點列表 | info breakpoints |
display 變量名 | 跟蹤顯?指定變量的值(每次停?時) | display x |
undisplay 編號 | 取消對指定編號的變量的跟蹤顯? | undisplay 1 |
until X?號 | 執?到指定?號 | until 20 |
backtrace/bt | 查看當前執?棧的各級函數調?及參數 | backtrace |
info/i locals | 查看當前棧幀的局部變量值 | info locals |
quit | 退出GDB調試器 | quit |
2.4 常見技巧
安裝cgdb:上?的基本調試還是?煩,雖然是?屏,但是還是想看到代碼調試推薦安裝cgdb:Ubuntu: sudo apt-get install -y cgdbCentos: sudo yum install -y cgdb
2-4-1 watch

2-4-2 set var確定問題原因
2-4-3 條件斷點
注意:條件斷點添加常?兩種?式:1. 新增 2. 給已有斷點追加注意兩者的語法有區別,不要寫錯了。新增: b 行號/?件名:行號/函數名 if i == 30(條件)給已有斷點追加:condition 2 i==30, 其中2是已有斷點編號,沒有if
?
?