日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

vim、g++、gdb及makefile的学习

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。