vim、g++、gdb及makefile的学习
<一>.vim
? ? 一.vim有主要有三種模式:命令模式、插入模式、底行模式
????????1.命令模式(command mode)
????????????控制光標的移動、字符、字或行的刪除,移動復制某段進入Insert mode下,或者lastline ????????mode。
????????2.插入模式(Insert mode)
????????????只有在Insert mode下,才可以做文字輸入,按【Esc】鍵可回到命令行模式
????????3.底行模式(lastline mode)
????????????將文件保存(:w)或者退出(:q),也可以設計編輯環境,如尋找字符串,列出行號等等
????
?????二、基本操作
????????1.vim test.c?????
????????????若直接touch一個test.c則vim打開即可以編輯,若test.c不存在執行此命令則會創建并
????????打開。進入vim后,是處于[命令號模式],需要切換到[插入模式]才可以輸入程序。
????????????在[命令模式]下按字符 i 或者 a 即可以進入[插入模式]。插入模式下可以輸入文字或
????????者刪除需要刪除的內容.
????????????【Esc】可以切換至[命令行模式]
???????????? 要退出vim或者保存文件,在[命令行模式]下按 : 冒號進入[底行模式]
?????????????????:w????(保存當前文件)
?????????????????:wq????(保存并退出)
?????????????????:q!????(強制退出vim)
? ? ? ???2.命令功能鍵
????????????a.插入模式
????????????按 i 進入插入模式,此時是從光標當前位置開始輸入文件
????????????按 a 進入插入模式,從光標所在的位置的下一個位置開始輸入文字
????????????按 o 進入插入模式,是插入新的一行,并從首行開始輸入文字
????????????b.命令行模式
????????????按 gg 光標移動到文章的最開始
????????????按 GG 光標移動到文章的最末
????????????按 ^ ?光標移動到所在行的行首
????????????按 w ?光標跳到下個單詞的開頭
????????????按 e ?光標跳到下個字的字尾
????????????按 b ?光標回到上個字的開頭
????????????按 x ?每按一次,刪除光標所在位置的一個字符
????????????按 #x 6x表示刪除光標所在位置的后面(包括自己在內)的6個字符
????????????按 X ?每按一次,刪除光標所在位置的前面的一個字符
????????????按 dd 刪除光標所在行
????????????按 #dd 例如6dd表示從光標所在行開始刪除#行
? ? ? ? ? ??
???????? ? ?yw????將光標所在之處到字尾的字符復制到緩沖區
????????????#yw? ?復制#個字到緩沖區
????????????yy? ? 復制光標所在行到緩沖區?
????????????#yy? ?復制從光標所在行往下數#行
????????????p???? 粘貼到光標所在位置
????????????
????????????R???? 替換光標所在處的字符,直到按【Esc】退出replace模式
????????????u???? 撤銷上一次操作,可以執行多次回復
????????????cw????更改光標所處的字到字尾處
????????????
????????????ctrl g列出光標所在行行號
????????????#G????15G表示移動光標到文章的第15行行首
???????????? h(左)j(下)k(上)l(右)
????????????^(光標移至行首)
????????????G 光標移至文章最后
????????????$ 光標移至行尾
????????????c.底行模式
????????????:set nu????在文件的每一行前面列出行號
????????????:#????? ? ?輸入一個數字再按回車跳到改行
????????????:/關鍵字? ?先按 / 再輸入您想尋找的字符,如果第一次找的關鍵字不是想要的,就按
????????????????????n 即可以找到
????????????:?關鍵字????同上
<二>.gcc/g++???
????一、編譯過程
????????1.預處理:(gcc -E 預處理結束后停止)
????????? ??gcc -E test.c -o test.i
? ? ? ? ?預處理包括宏替換、刪除注釋、條件編譯、頭文件展開
????????2.編譯:生成匯編
????????????gcc -S test.i -o test.s
?????????gcc首先要檢查代碼的規范性,是否有語法錯誤等,檢查無誤后,gcc把代碼翻譯成匯編語言
????????3.匯編:生成機器可識別代碼
????????????gcc -c test.s -o test.o
?????????-c將匯編代碼轉化為.o的二進制目標代碼
????????4.連接:生成可執行文件或庫文件
????????????鏈接全局變量和函數。
????????????gcc test.o -o test
????????????函數庫一般分為靜態庫和動態庫,靜態庫是編譯連接時,把文件的代碼全加入到可執行
????????文件中,因此生成的文件比較大,但運行時就不需要庫文件了;動態庫與靜態相反,編譯連
????????接時沒有把代碼加入,而是在運行時運行連接文件加載庫,這樣就可以節省系統開銷
????????5.gcc也可以直接由test.c成為可執行文件
????????????gcc -o test tes.c
????二、編譯選項分析
????????-E????只激活預處理,不生成文件,我們需要把它重新定向到一個輸出文件里面
????? ? -S????編譯到匯編語言不進行匯編和連接
????????-c????編譯到目標文件
????????-o????輸出到文件
????????-static 禁止使用動態庫,所以編譯出來的東西一般比較大
????????-share ?盡量使用動態庫,所以生成的文件比較小,需要系統調用動態庫
????????-w????不生成任何警告
????????-Wall?生成所有警告信息
????????-g????生成調試信息
<三>.gdb(Linux調試器)
? ? gdb是Linux下的代碼調試工具,在使用時需要在源代碼生成時加上-g選項。退出調試ctrl+d或者quit
????一、調試過程
????????r/run????????運行程序
????????s/step? ?????進入函數調用
????????b/breaktrace 查看各級函數調用及參數
????????info break? ?查看斷點信息
????????finish????? ?執行到當前函數返回,然后停下來等待命令
????????break行號????在某一行設置斷點
????????break函數名? 在某函數開頭設置斷點
????????continue/c? ?從當前位置開始連續而非單步執行程序
????????run/r????????從開始連續而非單步執行程序
????????delete breakpoints ? 刪除所有斷點
????????delete breakpoints n 刪除行號為n的斷點
????????disable breakpoints ?警用斷點
????????enable breakpoints ? 啟用斷點
??????? p 變量????????????? ?打印變量值
??????? display 變量名????? ?動態顯示每次停下來變量的值
????????undisplay ?????????? 取消先前設置的那些變量的跟蹤
????????until行號????????????跳至行號? ? ???
????????n/next????????????? ?單步執行
<四>.ctags(Linux代碼查看)
????ctags -R????在當前目錄下建立索引
????ctrl+]????? 跳轉到函數或變量定義處
????ctrl+T????? 跳轉至上級
? ??
?<五>.Makefile
? ? 一個工程中的源文件很多,按其類型、功能、模塊分別放在若干個目錄中,Makefile定義了一系列的規則來指哪些文件需要先編譯,哪些文件后編譯,哪些文件需要重新編譯,或者一些復雜的操作。Makefile帶來的好處就是——實現自動化編譯,一旦寫好,只需要一個make命令,整個工程自動化編譯,極大的提高了軟件開發的效率。
????make是一個命令工具,是一個解釋makefile中指令的工具,make執行命令時,需要一個makefile文件,告訴make怎么去編譯與鏈接程序
????makefile 是一個文件(描述了一個工程如何編譯等)
依賴關系&依賴方法
依賴方法(緊挨依賴關系 以tab開頭)
????1.make一個文件
????????touch Makefile//建立一個文件
vim Makefile//進入makefile
{//進入vim
test:test.o(依賴關系)(若發現test.o不存在,繼續向下尋找test.o的依賴關系)
gcc -o test test.o(依賴方法)
test.o:test.s
gcc -c test,s -o test.o
test.c:test.i
gcc -S test.i test.s
test.o:test.c
gcc -E test.c -o test.i(依次生成)
}
????或者可以直接
????????test:test.c
gcc -o test test.c
????? ? 退出makefile文件后
????????make????(執行makefile里的命令)
????????./test ?(運行可執行命令)
????????在makefile文件里可以寫清理工程(一般放到最后)
????????{
.PHONY:clean(PHONY指明偽目標)(目標文件有具體依賴列表,偽目沒有具體依賴列表,
????????標期待使用依賴方法)
clean:
rm -f test,o test.c test.i(在前面加@就可以屏蔽相關細節)
}
????????保存并退出makefile后執行clean就可以了刪除相關文件
????????make clean
轉載于:https://blog.51cto.com/10797127/1784301
總結
以上是生活随笔為你收集整理的vim、g++、gdb及makefile的学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#调用JAVA接口WSSE方式用Web
- 下一篇: SSH和SSL比较