You have to believe in yourswlf when no one else does-that makes you a winner right there--------你必須在沒有人相信你時相信自己,這能使你成爲贏家。
這篇博客是小黑總結出來查詢用的功能文檔,適合已經對Linux系統有所瞭解的小白,喜歡的同學可以收藏。希望能幫到大家提高效率。
一, vim常用命令
命令/編輯模式切換
[i/ESC]
- 以下操作都是在esc模式下的
以上都是本人經常用到的命令,也是比較實用的命令。
如果vim只是具有這些基本功能那早就被扔到歷史的長河中去了。
vim配置以及插件也能幫助我們更有效率的寫代碼
有興趣的可以參考這個博客:
(http://blog.csdn.net/freeking101/article/details/62037015)
二, gcc基本用法
gcc 其實像keil ,IDLE, eclipse這樣的平臺,集成了很多功能。
C語言編譯的整個過程是非常複雜的,裏面涉及到的編譯器知識、硬件知識、工具鏈知識都是非常多的,深入瞭解整個編譯過程對工程師理解應用程序的編寫是有很大幫助的,希望大家可以多瞭解一些,在遇到問題時多思考、多實踐。
編譯的概念:編譯程序讀取源程序(字符流),對之進行詞法和語法的分析,將高級語言指令轉換爲功能等效的彙編代碼,再由彙編程序轉換爲機器語言,並且按照操作系統對可執行文件格式的要求鏈接生成可執行程序。
編譯的完整過程:
C源程序.c--------->預編譯處理
.i------------------>編譯、優化程序
.s、.asm---------->彙編程序
.obj、.o、.a------>鏈接程序
.exe、.elf、.axf等
這部分小黑另外寫一篇博客介紹,以下只列出常用。
https://blog.csdn.net/weixin_46027505/article/details/105222904
選項 | 說明 | 舉例 |
---|---|---|
-E | 只進行預處理,不編譯 | gcc -E hello.c -o hello.i |
-S | 只編譯,不彙編 | gcc -S hello.i > hello.s |
-c | 只編譯、彙編,不鏈接 | gcc -c hello.s -o hello.o |
-g | 編譯生成可執行文件包含gdb調試信息,可被gdb調試 | gcc -g hello.c |
-o | 指定編譯生成可執行文件名 | gcc hello.c -o hello |
-I(大寫 i) | 指定include包含文件的搜索目錄,就是指出頭文件所在路徑 | |
-L | 指定鏈接所需庫(動態庫或靜態庫)所在路徑 | |
-l(小寫的 L) | 指定所需鏈接庫的庫名 | |
-ansi | ANSI標準 | |
-std=c99 | C99標準 | |
–static | 靜態編譯 | |
-static | 靜態鏈接 | gcc hello.o -o hello -static |
-
下面的不常用就不列在表中,另外優化還容易出現錯誤,不建議使用
-Werror 不區分警告和錯誤,遇到任何警告都停止編譯
-Wall 開啓大部分警告提示
-O0 關閉所有優化選項 -O1 第一級別優化,使用此選項可使可執行文件更小、運行更快,並不會增加太多編譯時間,可以簡寫 爲-O
-O2 第二級別優化,採用了幾乎所有的優化技術,使用此選項會延長編譯時間
-O3 第三級別優化,在-O2的基礎上增加了產生inline函數、使用寄存器等優化技術
-Os 此選項類似於-O2,作用是優化所佔用的空間,但不會進行性能優化,常用於生成終版本 -
對列表裏空白部分小黑在製作動態庫中有運用:
https://blog.csdn.net/weixin_46027505/article/details/105223248
三, gdb基本使用
GDB調試GDB 是自由軟件基金會(Free Software Foundation)的軟件工具之一。它的作用是協助程序員找到代碼中的錯誤。如果沒有GDB的幫助,程序員要想跟蹤代碼的執行流程,唯一的辦法就是添加大量的語句來產生特定的輸出。但這一手段本身就可能會引入新的錯誤,從而也就無法對那些導致程序崩潰的錯誤代碼進行分析。
GDB的出現減輕了開發人員的負擔,他們可以在程序運行的時候單步跟蹤自己的代碼,或者通過斷點暫時中止程序的執行。此外,他們還能夠隨時察看變量和內存的當前狀態,並監視關鍵的數據結構是如何影響代碼運行的。
gdb是linux下非常好用的一個調試工具,雖然它是命令行模式的調試工具,但是它的功能強大到你無法想象,這裏簡單介紹下gdb下常用的命令。
- 首先我們
gcc -g hello.c hello
//加入調試信息
- 然後
gdb -q hello
//加載hello,但是去掉繁瑣的信息,版本信息啥的
也可以先
gdb
file hello
- 下面就是常用命令
命令 | 全稱 | 解釋 | 示例 |
---|---|---|---|
r | run | 運行被調試的程序,如果此前沒有下過斷點,則執行完整個程序;如果有斷點,則程序暫停在第一個可用斷點處。 | (gdb) r |
c | Continue | 繼續執行被調試程序,直至下一個斷點或程序結束。 | (gdb)c |
l | list | 列出源碼 | list hello.c:5,10 |
b | Breakpoint | 設置斷點。 | b 4 在第四行設置斷點 |
i | Info的 | 用於顯示各類信息,詳情請查閱“help i” | i r |
i b | info breakpoints | 打印斷斷點信息 | i b |
i r | information register | 打印寄存器信息 | i r |
d | Delete breakpoint | 刪除指定編號的某個斷點,或刪除所有斷點。斷點編號從1開始遞增。 | d 4 |
n | next | 執行一行源程序代碼,此行代碼中的函數調用也一併執行。相當於其它調試器中的“Step Over (單步跟蹤) | n |
s | step | 執行一行源程序代碼,如果此行代碼中有函數調用,則進入該函數;相當於其它調試器中的“Step Into (單步跟蹤進入) | s |
p | 顯示指定變量(臨時變量或全局變量)的值。 | (gdb) p i | |
q | Quit | 退出GDB調試環境 | (gdb) q |
- 最後還有幾個命令挺好用的。
shell clear
//清屏
help
//幫助信息,不加命令,列出全部
(gdb) help display
如果不想刪除斷點可以使能和去能
disable 4
enable 4
還有一個概念:
條件斷點:
當滿足條件就中斷程序運行,
命令:break line-or-function if expr。
例如:(gdb)break 666 if testsize==100