廣州網(wǎng)站優(yōu)化哪家快洛陽市網(wǎng)站建設(shè)
目錄
---工具功能
1. vim
1.1 vim的模式
1.2 vim常見指令
2. gcc/g++
2.1 預(yù)備知識(shí)
2.2 gcc的使用
3.make,Makefile
make.Makefile的使用
4.yum
--yum三板斧
5.git
--git三板斧
--Linux下提交代碼到遠(yuǎn)程倉庫
6.gdb
6.1 gdb的常用指令
學(xué)習(xí)目標(biāo):
1.知道這些工具的功能
2.掌握這些工具的基本使用
---工具功能
編寫代碼???????? -- vim
編譯代碼 ????????-- gcc ,g++
調(diào)試代碼 ????????-- gdb
代碼管理? ? ? ? ?-- git
運(yùn)行/自動(dòng)化構(gòu)建程序 --make/Makefile
1. vim
1.1 vim的模式
1.命令行模式? 2.編輯模式? ?3.低行模式
1.2 vim常見指令
--默認(rèn)打開
1.命令模式(默認(rèn)打開的模式)
--輸出 i 即可寫代碼 (編輯/插入模式)
--回到命令模式:按Esc
--退出:在命令模式當(dāng)中輸出shift + :
-w 保存 -q 退出 -wq 保存并退出 -!強(qiáng)制
--命令行模式指令
--編輯
- yy:將當(dāng)前光標(biāo)所在的行,復(fù)制? ? ? ? ? ? ? ? ? nyy(n表示具體的數(shù)字)
- p:將復(fù)制行進(jìn)行粘貼? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? np
- dd:將當(dāng)前光標(biāo)所在的行,剪切(刪除)? ?ndd(刪除/剪切n行)
- u:撤銷歷史操作
- ctrl + r :撤銷u操作
- shift + ~ :大小寫切換
- shift + r:替換(進(jìn)入替換模式)
- r:替換光標(biāo)所在的字符,支持nr
- x or X(shift + x):刪除光標(biāo)所在的字符,包括之前或者之后 支持nx
--光標(biāo)移動(dòng)
- gg:光標(biāo)定位到文件的最開始
- shift + g :光標(biāo)定位到文件的結(jié)尾
- n + shift + g :光標(biāo)定位到文件的任意行
- shift + 6(^):光標(biāo)定位到當(dāng)前行的最開始(上)
- shift + 4 ($):光標(biāo)定位到當(dāng)前行的最結(jié)尾(下)
- w,b:以單詞為單位進(jìn)行光標(biāo)的前后移動(dòng)(左右)
- h左,j下,k上,l 右
--底行模式
- set nu/nonu :調(diào)出行號(hào),或者取消行號(hào)
- vs 文件名 :分批操作
- w:寫入,w!(強(qiáng)制)
- q:退出, q!(強(qiáng)制)
- ctrl + ww :光標(biāo)跳轉(zhuǎn)
- !? +? cmd:不退出vim執(zhí)行對(duì)應(yīng)的指令(執(zhí)行命令,編譯,運(yùn)行,查看man手冊(cè))
示例:
--set nu/nonu :調(diào)出行號(hào),或者取消行號(hào)
set nu/nonu 顯示/取消行號(hào)
--vs 文件名 :分批操作
vs + 文件名 分批操作
--ctrl + ww :光標(biāo)跳轉(zhuǎn)
ctrl + ww //光標(biāo)跳轉(zhuǎn)
-- !? +? cmd:不退出vim執(zhí)行對(duì)應(yīng)的指令
! man 3 printf
2. gcc/g++
2.1 預(yù)備知識(shí)
gcc是一個(gè)專門編譯鏈接C語言的編譯器 g++(C++)
一、程序翻譯過程:
文本的C -->計(jì)算機(jī)二進(jìn)制
- 1.預(yù)處理:(a.去注釋 b.宏替換 c.頭文件展開 d.條件編譯)
- 2.編譯(C ->匯編)
- 3.匯編(匯編 -> 可重定向二進(jìn)制目標(biāo)文件)
- 4.鏈接(鏈接 -> 多個(gè).o ,.. ,.obj ->合并成一個(gè)可執(zhí)行).exe
(gcc/g++ 也要遵守)
二、動(dòng)靜態(tài)庫 --- (感性的認(rèn)識(shí))
- 動(dòng)態(tài)鏈接:將庫中我要的方法地址,填入到我們的可執(zhí)行程序中,建立關(guān)聯(lián)(節(jié)省資源)
- 靜態(tài)鏈接:將庫中方法的實(shí)現(xiàn),拷貝到我們的可執(zhí)行程序中
一般鏈接的過程,兩種方式:
a.動(dòng)態(tài)鏈接???????? - ????????需要?jiǎng)討B(tài)庫
b.靜態(tài)鏈接 ????????- ????????需要靜態(tài)庫
Linux: .so(動(dòng)態(tài)庫) .a(靜態(tài)庫)
windows: .dll(動(dòng)態(tài)庫) .lib(靜態(tài)庫)
注:gcc和g++默認(rèn)形成的可執(zhí)行程序是動(dòng)態(tài)鏈接的
2.2 gcc的使用
gcc 文件名 -o 新生成的文件名
其它選項(xiàng):
- gcc -E mytest.c -o mytest.i (預(yù)處理)開始翻譯直到預(yù)處理完成
- gcc -S mytest.i -o mytest.s (編譯)開始翻譯直到編譯完成
- gcc -c mytest.s -o mytest.o (匯編)開始翻譯直到匯編完成
- gcc mytest.o -o mytest.o (鏈接)??(mytest.o 可重定向目標(biāo)文件)
示例:
gcc test2.c -o test2
3.make,Makefile
make.Makefile的使用
1.make && makefile
make是一個(gè)命令
makefile是一個(gè)文件
--使用
touch Makefile ????????建立Makefile文件
vim Makefile? ? ? ? ? ? ?編寫Makefile(a.依賴關(guān)系 b.依賴方法)
mytest:test.c (依賴關(guān)系)gcc test.c -o mytest (依賴方法).PHONY:clean(偽目標(biāo)) clean:rm -f mytest
調(diào)用:
make (構(gòu)建) make clean (清理)
makefile指令是從上到下掃描的
注:clean 總是被執(zhí)行的:總是會(huì)根據(jù)依賴放關(guān)系,執(zhí)行依賴方法
--在上面的例子里,可以重復(fù)執(zhí)行clean,但不能重復(fù)執(zhí)行mytest(沒被.PHONY修飾)
? ? ? ? --你在Makefile中定義一個(gè)目標(biāo),與當(dāng)前目錄中存在同名的文件時(shí),Make會(huì)默認(rèn)認(rèn)為這個(gè)目標(biāo)是一個(gè)文件,并嘗試根據(jù)文件的時(shí)間戳來判斷是否需要重新構(gòu)建。
提問:makefile是如何知道我的文件是最新的?
--根據(jù)最新的修改時(shí)間
示例:
1.創(chuàng)建Makefile
touch Makefile
2.編寫Makefile
vim Makefile
3.調(diào)用:根據(jù)寫好的Makefile自動(dòng)生成可執(zhí)行文件,并進(jìn)行清理:
make //構(gòu)建
make clean //清理
--可以重復(fù)執(zhí)行make clean(其被.PHONY修飾)
通過使用
.PHONY
,告訴Make,這個(gè)目標(biāo)是偽目標(biāo),不要期望生成一個(gè)同名文件,只需執(zhí)行其中定義的命令。
4.yum
--yum三板斧
1.yum list 列出能下的軟件
--yum list | grep sl (將所有包含sl文件的名稱顯示出來)
2.yum install
-- sudo yum install -y ????????????????安裝軟件(-y表示默認(rèn)認(rèn)可,不需要再問用戶)
3. yum. remove 你的軟件 ????????移除軟件(一般要加sudo)
5.git
--說明
git用于管理代碼,git的精華:多人協(xié)作開發(fā),(學(xué)習(xí)階段,大多數(shù)自己寫代碼,暫不涉及)
下面說明怎么使用git提交代碼到自己的遠(yuǎn)程倉庫
--git三板斧
正常情況:
- git add 你的文件 #添加我們的代碼到本地倉庫
- git commit -m "這里必須寫提交日志"
- git push
其它情況:
- 1.git log #查看提交記錄
- 2.git pull #同步倉庫
- 3.git rm 文件 #刪除本地倉庫的文件
刪除本地倉庫文件后,再git commit -m " 日志" git push
遠(yuǎn)程倉庫里的文件會(huì)被刪除
--.gitignore # 不想提交某些后綴的文件同步到遠(yuǎn)端的git倉庫,就可以添加到.gitignore
修改本地倉庫文件后,再add,commit,push就能將遠(yuǎn)程倉庫的文件修改
--若出現(xiàn)提交失敗,可能是倉庫未同步,git pull再提交
--Linux下提交代碼到遠(yuǎn)程倉庫
配置環(huán)境:
第一次提交需要輸入下面的指令:
git config --global user.email "you@example.com" git config --global user.name "Your Name"
這兩個(gè)自行輸入即可(這個(gè)是用來說明你是誰的,git支持多人協(xié)作,查看日志的時(shí)候可以看到是誰提交的代碼)
在克隆倉庫/提交代碼的時(shí)候,應(yīng)該會(huì)讓你輸入你gitee的賬號(hào)名和密碼(根據(jù)它的提升輸入即可)
1.在Linux環(huán)境下輸入:git clone 倉庫網(wǎng)址
這里可以看到就把倉庫克隆過來了
git倉庫就是.git 文件
2.使用三板斧提交寫好的文件就行:
git add test.cgit commit -m "提交測試"git push
這里push后要求輸入gitee的用戶名和密碼
然后就把寫好的文件提交到遠(yuǎn)程倉庫了
6.gdb
6.1 gdb的常用指令
gdb 文件名 (調(diào)試)
- ?l 0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??--從第0行開始顯示代碼
- r? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --開始調(diào)試,如果沒有設(shè)置斷點(diǎn),就直接運(yùn)行結(jié)束
- b 行數(shù)? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--打斷點(diǎn) (會(huì)形成斷點(diǎn)編號(hào),可用info查看)
- info b? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--查看斷點(diǎn)
- d 斷點(diǎn)編號(hào)? ? ? ? ? ? ? ? ? ? ? --刪斷點(diǎn)
- disable 斷點(diǎn)編號(hào)? ? ? ? ? ? --使能(打開)
- enable 斷點(diǎn)編號(hào)? ? ? ? ? ? ?-- 關(guān)閉
- p 變量名? ? ? ? ? ? ? ? ? ? ? ? ? --打印變量內(nèi)容:
- n? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --逐過程 (相當(dāng)于vs中的F10)
- s? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ?--進(jìn)入函數(shù)(相當(dāng)于vs中的F11)
- bt? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--查看當(dāng)前調(diào)用的堆棧
- finish? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --函數(shù)跑完就停下
- display 名稱? ? ? ? ? ? ? ? ? ? ?--設(shè)置常顯示
- undisplay 編號(hào)? ? ? ? ? ? ? ? ?--取消常顯示
- until 行數(shù) (不建議)? ? ? --跳到指定行數(shù)
- c? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --運(yùn)行到下一個(gè)斷點(diǎn)出就停下來
- quit? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --退出
補(bǔ)充:
--gdb會(huì)記錄最近一條命令,如果命令無變化,可以直接回車
修改特定變量:set var 變量 = 數(shù)值(vs中監(jiān)視窗口,可以給變量賦值查看)
示例:
因?yàn)間cc,g++默認(rèn)形成的可執(zhí)行程序式release的,所以無法直接調(diào)試
解決:使用gcc編譯的時(shí)候,添加-g 選項(xiàng),將其改為debug方式發(fā)布
我寫了一個(gè)打印1-100的和的文件,現(xiàn)在對(duì)其調(diào)試
先編譯,生成debug版本的運(yùn)行文件
gcc test.c -o test -g //生成Debug版gdb test
-- l? 0 (從第0行開始顯示代碼)
--打斷點(diǎn): b 行數(shù)
--查看斷點(diǎn) info b
--刪斷點(diǎn) d 斷點(diǎn)編號(hào)
--打印變量內(nèi)容: p 變量名
--逐過程 n (相當(dāng)于vs中的F10)
--進(jìn)入函數(shù) s (相當(dāng)于vs中的F11)
--查看當(dāng)前調(diào)用的堆棧 bt
--函數(shù)跑完就停下 finish
--設(shè)置常顯示 display 名稱
--取消常顯示 undisplay 編號(hào)
--運(yùn)行到下一個(gè)斷點(diǎn)出就停下來 c
這里我打了兩個(gè)斷點(diǎn):(17,19行)
使用c后直接跳轉(zhuǎn)到下一個(gè)斷點(diǎn)19
補(bǔ)充:
gcc和g++默認(rèn)形成的可執(zhí)行程序是動(dòng)態(tài)鏈接的
gcc,g++默認(rèn)形成的可執(zhí)行程序式release的,所以無法直接調(diào)試