LINUX下C語言編程基礎


實驗二 Linux下C語言編程基礎

一、實驗目的

1. 熟悉Linux系統下的開發環境

2. 熟悉vi的基本操作

3. 熟悉gcc編譯器的基本原理

4. 熟練使用gcc編譯器的常用選項

5 .熟練使用gdb調試技術

6. 熟悉makefile基本原理及語法規范

7. 掌握靜態庫和動態庫的生成

二、實驗步驟

1. 快捷鍵

Ubuntu中:

2. vim

VIM是一個非常好的文本編輯器,很多專業程序員使用VIM編輯代碼,即使以后你不編寫程序,只要跟文本打交道,都應該學學VIM,可以瀏覽參考一下普通人的編輯利器——Vim

VIM學習曲線非常陡峭,各種編輯器學習曲線如下圖(有調侃的意思):

學習曲線

VI來說,一開始就需要相當大的技能,但一旦掌握這些技能,則你將會越來越熟練,這跟五筆打字很類似。我們建議通過實踐練習來學習具體來說通過VIMTUTOR或玩游戲(Vim大冒險PacVim)來學習。

玩游戲去Vim大冒險PacVim通關就學會了VIM。

VIMTUTOR是個實踐教程,通過實踐30分鍾讓你對VIM編輯器入門,只要在命令行中輸入vimtutor,然后跟着教程練習就可以了。如下圖:

vimtutor

vimtutor界面

然后你可以把這張圖做計算機的桌面背景,每天學習一兩個鍵:

vim

想當程序員用這張專門給程序員的鍵盤圖:

vim-programmer

程序員有幾個鍵提示一下:

  • 大寫“K”可以用來查找函數的幫助信息:查看 man page,命令模式下,將光標放在函數名上,按"K"可以直接察看 man page。
  • 幾個設置

:set nu 顯示行號

:set ai 自動縮行

:set ts=4 設置一個 TAB 鍵等於幾個空格

  • 移動光標

[[ 轉到上一個位於第一列的"{"

]] 轉到下一個位於第一列的"{"

{ 轉到上一個空行

} 轉到下一個空行

gd 轉到當前光標所指的局部變量的定義

深入學習參考:

GCC編譯代碼的過程如下:

gcc1

我們可以把編譯過程分成四步,以編譯hello.c生成可執行文件hello為例,如下圖:

gcc2

  • 預處理:gcc –E hello.c –o hello.i;gcc –E調用cpp
  • 編  譯:gcc –S hello.i –o hello.s;gcc –S調用ccl
  • 匯  編:gcc –c hello.s –o hello.o;gcc -c 調用as
  • 鏈  接:gcc hello.o –o hello     ;gcc -o 調用ld

編譯過程比較難記,我們簡化一下,前三步,GCC的參數連起來是“ESc”,相應輸入的文件的后綴是“iso”,這樣記憶起來就容易多了。

學習GCC的另外一個重點是:參考教材《深入理解計算機系統》 7.6,7.10節,學習靜態庫,動態庫的制作。

4. gdb

建議使用CGDB,比GDB好用,熟悉VC的調試方式,可以使用DDD。 注意使用GCC編譯時要加“-g”參數。 參考gdb參考卡GDB最基本的命令有:

  • gdb programm(啟動GDB)
  • b 設斷點(要會設4種斷點:行斷點、函數斷點、條件斷點、臨時斷點)
  • run 開始運行程序
  • bt 打印函數調用堆棧
  • p 查看變量值
  • c 從當前斷點繼續運行到下一個斷點
  • n 單步運行
  • s 單步運行
  • quit 退出GDB

問題:GDB的n(next)命令讓GDB執行下一行,然后暫停。 s(step)命令的作用與此類似,只是在函數調用時step命令會進入函數,那么實際使用中應該優先選用哪個?為什么?

其他幾個我認為應該掌握的調試命令有:

  • display 跟蹤變量值的改變
  • until 跳出循環
  • finish 跳出函數
  • help 幫助

學習參考:

5. make與makefile

三、練習

1.練習vimtutuor至少一遍;

2.使用vim 輸入以下代碼,聯系使用“K”查找幫助文檔:

3.練習gcc編譯運行代碼;

4.練習gdb調試代碼;

5.把上述代碼中除了main函數外的代碼制作成一個靜態庫math.a和一個共享庫math.so;

6.編寫makefile,讓代碼編譯,上述靜態庫和共享庫的使用自動化。

實驗遇到的問題:

在gcc的編譯過程中器匯編處理出現了問題。

加入了main函數也沒有成功。導致后續實驗無法成功。

實驗心得:

剛開始學習還是有些吃力。加上以前基礎也不好,任重道遠。好好努力,希望能盡快熟悉linux系統。

大三了自己也希望大學能夠學習東西。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM