【Linux】基礎開發工具(3)

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 預備

程序的發布?式有兩種, debug 模式和 release 模式, Linux gcc/g++ 出來的?進制程
序,默認是 release 模式。
要使?gdb調試,必須在源代碼?成?進制程序的時候, 加上 -g 選項,如果沒有添加,程序無法被
編譯。

2.3 常見使用

開始: gdb binFile
退出: ctrl + d quit 調試命令
list/l:顯示源代碼
b:打斷點
d:刪斷點
刪斷點只能根據斷點編號來刪,gdb不退出,斷點編號依次遞增。
p:打印指定變量的值
dispaly:指定變量的值常顯示
命令
作?
樣例
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 cgdb
Centos: sudo yum install -y cgdb

2-4-1 watch

執行時監視?個表達式(如變量)的值。如果監視的表達式在程序運行期間的值發生變化,GDB 會暫停程序的執行,并通知使用者。

2-4-2 set var確定問題原因

更改?下標志位,假設我們想得到 +-result

2-4-3 條件斷點

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

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90318.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90318.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90318.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

synchronized 的使用和特性

synchronized 鎖對象 普通方法 synchronized 鎖普通方法時&#xff0c;其鎖的對象是調用該方法的實例 public synchronized void method() { // 方法體 } 靜態方法 靜態方法的鎖對象是所屬的 class&#xff0c;全局只有一個。 public static synchronized void staticMetho…

Gin Web 層集成 Viper 配置文件和 Zap 日志文件指南(下)

在微服務架構中&#xff0c;Gin 常被用作 Web 層框架&#xff0c;而 Viper 用于管理配置文件&#xff0c;Zap 則提供高性能的日志記錄功能。下面將詳細介紹如何在 Gin Web 層集成 Viper 配置文件和 Zap 日志文件。 1. 項目概述 假設我們有一個基于 Go 語言的微服務項目&#…

IoTDB:專為物聯網場景設計的高性能時序數據庫

什么是IoTDB&#xff1f;IoTDB&#xff08;Internet of Things Database&#xff09;是一款開源的時序數據庫管理系統&#xff0c;專為物聯網&#xff08;IoT&#xff09;場景設計&#xff0c;由清華大學軟件學院團隊自研&#xff0c;天謀科技團隊負責維護。它針對物聯網數據的…

[netty5: MessageAggregator HttpObjectAggregator]-源碼解析

在閱讀這篇文章前&#xff0c;推薦先閱讀 [netty5: ByteToMessageCodec & MessageToByteEncoder & ByteToMessageDecoder]-源碼分析[netty5: HttpObject]-源碼解析 100-continue 100-continue 是 HTTP/1.1 協議中的一種機制&#xff0c;用于客戶端在發送大體積請求體…

前端學習1--行內元素 vs 塊級元素(基礎概念+案例實操)

一、內外邊距學習&#xff1a;&#xff08;1&#xff09;簡單理解&#xff1a;padding為內邊距。padding不會影響元素的位置&#xff0c;只會調整元素的內容&#xff08;文字&#xff09;與邊框之間的間距。margin為外邊距。margin會影響元素在流式布局中的位置&#xff0c;改變…

Express + mysql2 + jwt 實現簡單的登錄鑒權

目前項目中使用Express 實現簡單API功能&#xff0c;需要提供一套登錄鑒權方案。這邊是API側實現 相關路由的登錄鑒權。大體思路&#xff1a;就是&#xff0c;登錄接口中通過jwt加密 token返回前端&#xff0c;前端其他接口把加密好的放入請求頭Authorization中。中間件通過請求…

ReAct (Reason and Act) OR 強化學習(Reinforcement Learning, RL)

這個問題觸及了現代AI智能體&#xff08;Agent&#xff09;構建的兩種核心思想。 簡單來說&#xff0c;ReAct 是一種“調用專家”的模式&#xff0c;而強化學習 (RL) 是一種“從零試錯”的模式。 為了讓你更清晰地理解&#xff0c;我們從一個生動的比喻開始&#xff0c;然后進行…

iTwinjs 4.10-4.11 更新

撤銷更改 目前&#xff0c;撤銷一個有缺陷的變更集的唯一方法是從 iModel Hub 中移除它&#xff0c;這可能會導致許多副作用&#xff08;無法撤銷&#xff09;。一個更好的方法是在時間線中撤銷變更集&#xff0c;并將其作為新的變更集引入。盡管這種方法仍然具有侵入性&#…

【CSS-15】深入理解CSS transition-duration:掌握過渡動畫的時長控制

在現代網頁設計中&#xff0c;平滑的過渡效果是提升用戶體驗的關鍵因素之一。CSS transitions 為我們提供了一種簡單而強大的方式來實現元素在不同狀態之間的平滑過渡&#xff0c;而 transition-duration 屬性則是控制這些過渡效果時長的核心工具。本文將全面探討 transition-d…

mysql-筆記

1. 安裝mysql # 使用brew安裝 brew install mysql# 查看是否安裝成功 mysql -V 相關文檔&#xff1a; mac&#xff1a;macOS下MySQL 8.0 安裝與配置教程 - KenTalk - 博客園 Linux安裝&#xff1a;linux安裝mysql客戶端_linux mysql 客戶端-CSDN博客 2. 啟動mysql 每次使…

Spring Boot啟動優化7板斧(延遲初始化、組件掃描精準打擊、JVM參數調優):砍掉70%啟動時間的魔鬼實踐

Spring Boot啟動優化7板斧&#xff1a;砍掉70%啟動時間的魔鬼實踐1. 延遲初始化&#xff1a;按需加載的智慧2. 組件掃描精準打擊&#xff1a;告別無差別掃描3. JVM參數調優&#xff1a;啟動加速的隱藏開關4. 自動配置瘦身&#xff1a;砍掉Spring Boot的"贅肉"5. 類加…

從0開始學習計算機視覺--Day08--卷積神經網絡

之前我們提到&#xff0c;神經網絡是通過全連接層對輸入做降維處理&#xff0c;將輸入的向量通過矩陣和激活函數進行降維&#xff0c;在神經元上輸出激活值。而卷積神經網絡中&#xff0c;用卷積層代替了全連接層。 不同的是&#xff0c;這里的輸入不再需要降維&#xff0c;而…

解決阿里云ubuntu內存溢出導致vps死機無法訪問 - 永久性增加ubuntu的swap空間 - 阿里云Linux實例內存溢出(OOM)問題修復方案

效果圖報錯通過對實例當前截屏的分析發現&#xff0c;實例因 Linux實例內存空間不足&#xff0c;導致操作系統出現內存溢出&#xff08;OOM&#xff09; 無法正常啟動。請您根據 Code&#xff1a;1684829582&#xff0c;在文檔中查詢該問題對應的修復方案&#xff0c;并通過VNC…

Serverless JManus: 企業生產級通用智能體運行時

作者&#xff1a;叢霄、陸龜 概述&#xff1a;本文介紹如何使用 JManus 框架構建通用智能體應用&#xff0c;部署并運行在 Serverless 運行時&#xff0c;構建企業級高可用智能體應用的實踐經驗。基于阿里云 Serverless 應用引擎SAE 運行穩定高可用的智能體應用&#xff0c; 基…

MySQL的數據目錄

導讀&#xff1a;根據前面的所學知識&#xff0c;我們知道了InnoDB存儲引擎存儲數據的數據結構、存儲過程&#xff0c;而被組織好的數據則被存儲在操作系統的磁盤上&#xff0c;當我們在對表數據進行增刪改查時&#xff0c;其實就是InnoDB存儲引擎與磁盤的交互。此外&#xff0…

Web前端開發: :has功能性偽類選擇器

:has功能性偽類選擇器::has() 是 CSS 中的一個功能性偽類選擇器&#xff0c;它允許開發者根據元素的后代元素、兄弟元素或后續元素的存在或狀態來選擇目標元素。它本質上是一個“父選擇器”或“關系選擇器”&#xff0c;解決了 CSS 長期以來無法根據子元素反向選擇父元素的痛點…

深度學習8(梯度下降算法改進2)

目錄 RMSProp 算法 Adam算法 學習率衰減 RMSProp 算法 RMSProp(Root Mean Square Prop)算法是在對梯度進行指數加權平均的基礎上&#xff0c;引入平方和平方根。 其中e是一個非常小的數&#xff0c;防止分母太小導致不穩定,當 dw 或 db 較大時&#xff0c;(du)2,(db)2會較大&…

JAVA面試寶典 -《網絡編程核心:NIO 與 Netty 線程模型詳解》

網絡編程核心&#xff1a;NIO 與 Netty 線程模型詳解 文章目錄網絡編程核心&#xff1a;NIO 與 Netty 線程模型詳解一、傳統 BIO 模型&#xff1a;排隊買奶茶的阻塞模式 &#x1f964;1.1 專業解釋1.2 簡單點比喻1.3 簡單示例二、NIO 模型&#xff1a;智能叫號餐廳系統 &#x…

藍橋杯 第十六屆(2025)真題思路復盤解析

本文以洛谷平臺所提供的題目描述及評測數據為基礎進行講解。 前言&#xff1a;這是本人的藍橋杯試卷&#xff0c;大概排省一前40%的位置&#xff0c;實際上這屆題目偏難&#xff0c;我沒有做出太多的有效得分。我把當時的思路和現在學習的思路都復盤進來&#xff0c;希望給大家…

蘭頓螞蟻路徑lua測試

蘭頓螞蟻local p0 local x,y,z0,7,0 local function add() local result,id Block:getBlockID(x,y,z)if id1 thenBlock:destroyBlock(x,y,z,false) pp90 elseBlock:setBlockAll(x,y,z,1,0) pp-90 end x,zx-math.floor(0.5math.sin(math.rad(p))),z-math.floor(0.5math.cos(m…