Linux基礎知識(二)

2021-10-18 19:23:28 字數 2452 閱讀 2456

二、專案的自動化構建工具

偵錯程式的功能:除錯、觀察程式的執行過程,通常目的都是為了排查程式的執行錯誤。

除錯程式的前提:程式必須是乙個debug版本的程式。由於gcc/g++預設生成release版本程式,因此若要生成debug版本,則使用-g選項gcc -g test.c -o test。

可執行程式的分類:debug除錯版不對**進行優化,並且加入程式除錯資訊;release發布版包含除錯資訊,並且會對**進行優化。

gdb常用除錯指令:gdb ./test.exe

run:直接執行程式

b或break:打斷點。示例:break test.c:14 break function_name

start:開始逐步除錯

ib或info break:檢視斷點資訊

list:檢視除錯行附近**。示例:list test.c:12

d或delete:刪除斷點。示例:delete id

n或next:下一步(逐過程,遇到函式直接執行完畢)

watch:變數監控斷點,當變數發生改變的時候停下來。示例:watch variable_name

s或step:下一步(逐語句,遇到函式則進入函式繼續除錯)

q或quit:退出gdb除錯

until:直接執行到指定位置。示例:until test.c:16

c或continue:繼續從當前除錯位置執行

p或print:檢視或設定變數內容。示例: print var_name、print var=val

bt或backtrace:檢視函式呼叫棧(通常用於檢測程式執行時崩潰位置)

棧頂位置的函式就是程式發生崩潰的的位置,例如下圖:

是乙個文字檔案,記錄乙個專案的構建規則流程。

是乙個解釋程式,對makefile中記錄的構建規則流程逐步解釋執行,完成專案的構建。

make的解釋執行規則:

1、在命令列中敲擊make指令,則表示執行make解釋程式,程式會在當前目錄下找到名稱為makefile/makefile的檔案,解釋執行其中的專案構建規則。

2、在規則中,找到要生成的第乙個目標物件,(判斷目標物件是否已經存在,存在的話是否需要重新生成–根據原始碼檔案的最後一次修改時間對比),然後執行物件生成這一命令。

3、make每次在makefile中只會找到第乙個目標物件進行生成,生成之後就會退出(即不會生成第二個物件)。

4、make在生成目標物件的時候,會先查詢依賴物件的生成規則,先生成依賴物件,然後再去生成目標物件。

makefile的編寫規則:

目標物件:依賴物件

\t為了生成目標物件要執行的指令

預定義變數的使用: $@表示目標物件,$^表示所有依賴物件,$《表示依賴物件的第乙個

例如:

等價於:

等價於:

程式的編譯過程:預處理,編譯,彙編,鏈結。在專案構建中會整體分為兩步:編譯與鏈結。

這樣的好處是:如果只是修改了乙個.c檔案,對所有.c進行編譯生成可執行程式的過程來說,需要重新編譯所有.c生成可執行程式,效率低下。因此分為兩步進行操作,先把每個.c都生成自己的.o,然後再把所有的.o鏈結到一起。一旦乙個.c發生改變,只需要對這乙個.c進行編譯生成.o之後。重新鏈結一次就可以生成可執行程式(其他的.c不需要重新編譯)。

如下所示:

分別生成.o檔案,再鏈結生成可執行程式test。

修改了test.c檔案後,只需要重新生成test.o檔案,再將所有.o檔案重新鏈結一次生成可執行程式test即可。

因此,makefile應該編寫如下:

以上**可以簡化為:

再作一些優化可得:

偽物件(即.phony:):宣告乙個目標物件與外部檔案無關,表示每次這個物件不管是否最新都要重新生成。

加入偽物件,防止要生成的物件與外部檔案重名,保證make之後能生成正確的目標物件。完整**如下:

基礎知識 二

1,較大陣列應該在main函式外宣告,否則可能因為 他作為臨時變數在堆疊段中佔據的空間過大,棧溢位 2,string.h memcpy b,a,sizeof int k a b 複製k個元素 memcpy b,a,sizeof a a b memset a,0,sizeof a 將陣列全部填充為零 ...

基礎知識 二

1.物件導向的基本特徵 封裝 繼承 多型 2.內連線與外連線的區別 內連線需要保證兩個表中的所有行都滿足連線條件 而外連線則不然 外連線不僅包含符合連線條件的行 還包括左表 右表或兩個邊接表中所有資料行 3.事務是資料庫中乙個單獨的執行單元 事務的三個特性是 acid,分別是原子性 一致性 隔離性 ...

linux基礎知識

舉例來說,硬碟的檔名稱即為 dev hd a d 其中,括號內的字母為 a d 當中的任何乙個,亦即由 dev hda,dev hdb,dev hdc,及 dev hdd 這四個檔案的意思 注 這種型式的表示法在後面的章節當中會使用得很頻繁,請特別留意 那麼光碟機與軟盤呢?分別是 dev cdrom...