Linux | 相關知識點 | 可以通過點擊 | 以下鏈接進行學習 | 一起加油! |
---|---|---|---|---|
初識指令 | 指令進階 | 權限管理 | yum包管理與vim編輯器 | GCC/G++編譯器 |
make與Makefile自動化構建 |
在 Linux 開發中,GDB 調試器和 Git 版本控制工具是開發者必備的利器。GDB 幫助快速定位代碼問題,Git 則提供高效的版本管理與協作支持。本指南將簡明介紹兩者的核心功能與使用技巧,助力提升開發效率。
🌈個人主頁:是店小二呀
🌈C語言專欄:C語言
🌈C++專欄: C++
🌈初階數據結構專欄: 初階數據結構
🌈高階數據結構專欄: 高階數據結構
🌈Linux專欄: Linux
🌈喜歡的詩句:無人扶我青云志 我自踏雪至山巔
文章目錄
- 一、Git版本控制器
- 1.1 Git與GitHub關系
- 1.2 安裝git
- 二、GitHub創建項目
- 2.1 新建倉庫
- 2.2 將遠端倉庫拉起到本地
- 2.3 一、二板斧:add+commit
- 2.3.1 設置git上傳
- 2.3.2 git add與git commit在做什么?(重點)
- 2.4 三板斧:push
- 2.5 git其他選項
- 2.5.1 git log可以查看提交記錄
- 2.5.2 git status可以查看當前目錄狀態
- 三、git流程解析
- 四、Linux調試器-gbd
- 4.1 、可執行程序生成調試信息
- 4.3 readELF指令查看調試信息
- 五、gdb相關調式指令
- 5.1 list調式指令
- 5.2 run調試指令
- 5.3 斷點相關調試指令
- 5.3.1 breakpoint調試指令
- 5.3.2 info breakdpoints調試指令
- 5.3.3 delete調試指令
- 5.3.4 disable調試指令
- 5.3.5 enable調試指令
- 5.4 next調試指令
- 5.5 step調式指令
- 5.6 printf 調式指令
- 5.7 display調試指令
- 5.8 undisplay調式指令
- 六、快速排查問題
- 6.1 continue 調式指令
- 6.2 finish 調式指令
- 6.2.1 next和finish區別
- 6.3 until調式指令
- 6.4 set var調式指令
一、Git版本控制器
1.1 Git與GitHub關系
- 【Git】:Git是版本控制系統,專門用于管理和跟蹤代碼的修改歷史。**它能夠在本地完整保存項目的所有版本,方便開發者在自己的電腦上管理項目,記錄每次更改。
- 【GitHub】:GitHub是基于Git的遠程平臺,GitHub是一個托管代碼的在線平臺,它建立在Git之上,為Git倉庫提供了一個云端存儲庫。
Git主要是一個在本地管理文件版本的工具,用于跟蹤文件的每次修改,實現代碼的歷史管理。而為了滿足大規模協作的需求,GitHub應運而生,它在云端提供了一個基于Git的倉庫平臺,讓開發者可以遠程存儲、共享代碼,并實現多人協作和代碼同步。Git負責本地的版本控制,而GitHub是對Git功能的拓展,實現了在云端共享和管理代碼的能力。
1.2 安裝git
Linux下安裝git: sudo yum install -y git
二、GitHub創建項目
2.1 新建倉庫
對于Git是一個工具,而是gitee和github是為了Git搭建的網址。
在這里,選擇你需要的代碼語言來保存版本。README文件用于倉庫的說明,創建時會自動生成中英文版本。在分支選項中,這里推薦選擇單分支是為了簡化項目管理,特別是在項目初期或只是用于代碼托管時,不需要復雜的分支結構。單分支模式更適合簡單的版本控制,避免了多分支帶來的合并沖突和管理開銷。
2.2 將遠端倉庫拉起到本地
1.首先在普通用戶家目錄下,下載代碼請復制以下命令到終端執行。
指令:git clone 地址
2.克隆到普通用戶家目錄下,我們通過ls -la
指令進行查看。
3.當我們將遠端倉庫拉取到本地,為了確保提交的代碼身份被Gitee/GitHub正確識別,需要在本地進行相關配置
- 將本地倉庫里的文件拷貝遠端倉庫為了方便測試代碼,統一放到一個testgit文件中,然后進入遠端倉庫目錄進行拷貝。
命令:cp …/testgit . -rf
2.3 一、二板斧:add+commit
相關指令命令:
- 【git add . 】:將當前位置的所有文件都添加到本地倉庫上
- 【git commit -m"內容"】 (內容可以是日志或記錄,不能隨便填寫,必須填寫):該步驟是把內容提交到本地倉庫中,跟遠端倉庫沒有關系的
2.3.1 設置git上傳
如果是首次使用,需要配置郵箱和用戶名。是為了確保可以找到這份代碼的源頭。
設置命令:
- git config -global user.email-“你的郵箱”
- git config -global user.name-“你的名字”
2.3.2 git add與git commit在做什么?(重點)
git add
和 git commit
只能在 Git 倉庫的目錄及其子目錄中操作,不能直接將其他路徑的文件添加到該倉庫的版本控制中。
Git 的工作流程分成了幾個不同的區域:工作區、暫存區和本地倉庫。簡單來說,Git 并不會自動保存工作區中的修改,而是需要顯式地通過 git add
和 git commit
命令將更改記錄到本地倉庫。
- 工作區(Working Directory):這是你在項目目錄中看到的文件。當你對文件進行修改時,這些更改只存在于工作區,還沒有被 Git 跟蹤為新版本。
- 暫存區(Staging Area):當你運行
git add
命令時,Git 會將選定的更改(比如修改、添加或刪除的文件)添加到暫存區。暫存區是一個“待提交”的清單,是 Git 知道你想提交的內容,但還沒有正式保存的地方。- 本地倉庫(Local Repository):當你運行
git commit
命令時,Git 會將暫存區的內容提交到本地倉庫中,這就創建了一個新的“版本”記錄。這些提交在本地倉庫中保存下來,可以隨時查閱或還原。
2.4 三板斧:push
命令: git push
這里需要輸入你在平臺上的賬號名和密碼,完成本地倉庫跟遠端倉庫進行同步
2.5 git其他選項
2.5.1 git log可以查看提交記錄
2.5.2 git status可以查看當前目錄狀態
這里我只是add+commit
,并沒有同步到遠端。系統就會提示當前我已經托管到本地倉庫,但是還沒有同步到遠端。然后push同步就不需要做任何操作拉。
三、git流程解析
1..git
目錄是 Git 本地倉庫,通過 add
命令可以將修改的內容提交到一個暫存區,方便后續的版本控制和管理。
2.commit
會將暫存區中的內容提交到本地倉庫,并清空暫存區。最后,push
會將本地倉庫的更改同步到遠程倉庫。
3..gitgnore文件
- 它實際上是一個配置文件,用于指定哪些文件或文件類型不應被添加到版本控制中。
- 不要忘記使用
*
符號,它是一個通配符,用于匹配任意數量的字符。- 我們可以自行編輯該文件,將不想納入版本控制的文件后綴或路徑寫入其中。
四、Linux調試器-gbd
知識鋪墊
- 程序的發布方式有兩種,debug模式和release模式
- Linux gcc/g++出來的二進制程序,默認是release模式
- 要使用gdb調試,*必須在源代碼生成二進制程序的時候,加上 -g 選項
4.1 、可執行程序生成調試信息
gdb系統是默認安裝,直接輸入
gdb
即可啟動調試器。
在Linux下調試,只能使用gdb進行調試。-g
選項用于在編譯時生成調試信息,對此啟用 -g
選項后文件體積會增大,但不會影響程序的執行速度
4.3 readELF指令查看調試信息
通過 readelf
工具可以查看使用 -g
選項生成的可執行文件中的調試信息。readelf
是一個用于讀取 ELF 格式文件的命令行工具,可以幫助我們檢查 ELF 文件的頭信息、段和節的內容,其中也包括調試信息。
在 Linux 系統中,雖然可執行文件是二進制格式,但其內部結構采用了 ELF (Executable and Linkable Format/可執行與可鏈接格式)格式,可以通過 readELF
工具查看。
五、gdb相關調式指令
調式指令可以全稱和簡寫,得到效果是一致的,這里通常采用簡寫。 q(退出quit)
5.1 list調式指令
【l/list】:查找源文件內容
兩種使用方式:
- 【list/l 行號】:顯示binFile源代碼,接著上次的位置往下列,每次列10行
- 【list/l 函數名】:列出某個函數的源代碼
- 【注意事項】:如果list/ l 后面直接跟對應的文件名是無法進行查看的,在gdb當中默認可以在該文件直接查看。
如果想要從頭開始進行查找,可以簡寫l 0
從0開始進行查找
雖然上list/ l 后面直接跟對應的文件名是無法進行查看的,但是我們可以文件名基礎之上,帶上行號或函數可以進行查找啦。
**gdb會默認記錄你最近執行的一條命令的,這里默認打印十行,這里可以直接回車回車,就看見全部源文件。**如果查找到結尾,會有系統提示,比如:我們對應的整個文件一共有24行。
【查找時,是否應該以被查找的行號或函數作為起點?】
如果輸入想查看的行號和函數,會顯示上下文。因為我們一般在看一份代碼的上下號,指定的行就是我們默認調試就是想看他的上下文。
5.2 run調試指令
【r/run】:運行程序
在調試之前都需要將程序運行起來,r回車
**r
指令類似于按下 F5,會直接編譯并運行程序直到結束。**但在這種模式下無法進行調試,因此我們可以先設置一個斷點,以便在指定位置暫停執行。
5.3 斷點相關調試指令
5.3.1 breakpoint調試指令
【b/breakpoint】:設置斷點
打斷點方式:
- 【break(b) 行號 :】:在某一行設置斷點
- 【break 函數名 :】:在某個函數開頭設置斷點
- 其中
:
用于指定文件和函數- 斷點不能連續打,編號被使用不會重現。斷點編號本質是一個線性增長的計數器
【使用場景】:b myproess.c :main
圖片效果解釋:
- 函數本質上就是一個代碼塊。設置斷點時,不是設置在某一行代碼上,而是設置在函數的入口地址。例如,不是第 15 行,而是第 17 行(函數的起始位置)
5.3.2 info breakdpoints調試指令
【i b/info breakdpoints】:查看當前設置了哪些斷點
通過info b
調試指令可以查看當前設置斷點,其中設置斷點都是具有線性增加的Num編號。
5.3.3 delete調試指令
【d/delete Num(編號)】:刪除指定編號斷點
這里刪除斷點,不能通過指定文件名、行號、函數名等形式刪除,而是通過Num編號
在調試過程中,斷點編號是線性增長的計數器,因此斷點的編號會逐漸增加而不會重復使用。由于編號不會重置,所以斷點不能連續設置(即使之前的斷點已刪除或禁用,其編號也不會再重新分配)。這種設計保證了每個斷點在整個調試過程中都有一個唯一編號。
5.3.4 disable調試指令
【disable Num(編號)】:禁用斷點,關閉Enb使能
5.3.5 enable調試指令
【enable Num(編號)】:啟用斷點,開啟Enb使能
5.4 next調試指令
gbd會默認記錄最近一次的指令,可以回車執行最近一次指令。
【n/next】:"逐過程"調試,類似于我們F10
5.5 step調式指令
【s/step】:"逐過程逐語句"調試,可進入到函數內部,類似于我們F11
5.6 printf 調式指令
【p/printf 變量】:打印變量值
在調試器中,$
通常用于表示查詢結果的編號。查看變量的內容或地址時,不能直接使用 p 變量名
,而應通過 p $變量名
來引用已查詢過的結果。
5.7 display調試指令
如果希望變量的數值始終顯示,并在每次調試時自動刷新,可以使用
display 變量名
命令。
【display】:常顯示變量的數值,具有相關編號
5.8 undisplay調式指令
要取消變量的自動顯示,不能直接使用
undisplay a
或undisplay &a
,而是需要使用undisplay 編號
命令。
【undisplay 編號】:取消變量的自動顯示
六、快速排查問題
【問題】:無論是使用 VS 調試器還是 gdb 調用調試,核心目標是什么?
并不是單純地通過調試就能解決所有問題,而是找到代碼中的具體問題,并針對性地分析和修復。歸根結底,調試的核心在于發現問題。
通過設置斷點,可以將程序執行劃分為不同的范圍。如果某個范圍內發生崩潰,就可以對這一范圍進行局部調試。斷點的作用就是幫助我們快速縮小問題范圍,尤其在面對冗長的代碼時,斷點能顯著提高排查效率。
6.1 continue 調式指令
【c/continue】:斷點處跳躍
6.2 finish 調式指令
【finish】指令:直接運行完當前所在的函數并停下。使用 finish
時,調試器不會逐步執行函數內部的代碼,而是快速跳出函數,直接返回調用點。這在函數內部細節不重要、或者希望快速查看函數返回結果時非常實用。
6.2.1 next和finish區別
因此,n
和 finish
的關鍵區別在于 finish
能讓你在函數返回后停留并顯示返回值,而 n
只是跳過整個函數調用,并不提供返回值的詳細信息。
6.3 until調式指令
【until】指令:將程序運行到指定的行號并暫停,期間的代碼會被正常執行。這非常適合快速跳過某段代碼,直接查看指定位置的運行狀態
6.4 set var調式指令
set var 變量名 = 新值,這個指令非常適合調試復雜邏輯時臨時調整變量值!
【set var】:用于在調試過程中直接修改變量的值,從而影響程序的運行狀態
以上就是本篇文章的所有內容,在此感謝大家的觀看!這里是Linux筆記,希望對你在學習Linux旅途中有所幫助!