天天看點

5233楊光--Linux第二次實驗

實驗說明

1. 環境登入

無需密碼自動登入,系統使用者名shiyanlou,密碼shiyanlou 若不小心登出後,直接重新整理頁面即可

2. 環境使用

完成實驗後可以點選桌面上方的“實驗截圖”儲存并分享實驗結果到微網誌,向好友展示自己的學習進度。實驗樓提供背景系統截圖,可以真實有效證明您已經完成了實驗。 實驗記錄頁面可以在“我的首頁”中檢視,其中含有每次實驗的截圖及筆記,以及每次實驗的有效學習時間(指的是在實驗桌面内操作的時間,如果沒有操作,系統會記錄為發呆時間)。這些都是您學習的真實性證明。

3. 課程來源

VIM 線上手冊

内容一:vim編輯器的使用

1.vim編輯器的三種模式

Ⅰ正常模式:(按Esc或Ctrl+[進入) 左下角顯示檔案名或為空

Ⅱ插入模式:(按i鍵進入) 左下角顯示--INSERT--

Ⅲ可視模式:左下角顯示—VISUAL

2、vim的一些基本操作

Ⅰ、遊标移動:

在進入vim後,按下i鍵進入插入模式。在該模式下您可以輸入文本資訊,下面請輸入如下三行資訊:

12345678

abcdefghijk

shiyanlou.com

按Esc進入普通模式,在該模式下使用方向鍵或者h,j,k,l鍵可以移動遊标。

按鍵 說明
h
l 右(小寫L)
j
k
w 移動到下一個單詞
b 移動到上一個單詞

請嘗試在普通模式下使用方向鍵移動光标到shiyanlou這幾個字母上面

Ⅱ.插入模式

在普通模式下使用下面的鍵将進入插入模式,并可以從相應的位置開始輸入

指令
i 在目前光标處進行編輯
I 在行首插入
A 在行末插入
a 在光标後插入編輯
o 在目前行後插入一個新行
O 在目前行前插入一個新行
cw 替換從光标所在位置後到一個單詞結尾的字元

請嘗試不同的從普通模式進入插入模式的方法,在最後一行shiyanlou前面加上www.,注意每次要先回到普通模式才能切換成以不同的方式進入插入模式

Ⅲ.儲存文檔

指令行模式下儲存文檔:

儲存文檔從普通模式輸入:進入指令行模式,輸入w回車,儲存文檔。輸入:w 檔案名可以将文檔另存為其他檔案名或存到其它路徑下

Ⅳ.退出vim

指令行模式下退出vim:

從普通模式輸入:進入指令行模式,輸入wq回車,儲存并退出編輯

以下為其它幾種退出方式:

:q! 強制退出,不儲存
:q 退出
:wq! 強制儲存并退出
:w <檔案路徑> 另存為
:saveas 檔案路徑
:x 儲存并退出
:wq

Ⅴ.普通模式下退出vim

普通模式下輸入Shift+zz即可儲存退出vim

Ⅵ.删除文本

1.普通模式下删除vim文本資訊

進入普通模式,使用下列指令可以進行文本快速删除:

x 删除遊标所在的字元
X 删除遊标所在前一個字元
Delete 同x
dd 删除整行
dw 删除一個單詞(不适用中文)
d$或D 删除至行尾
d^ 删除至行首
dG 删除到文檔結尾處
d1G 删至文檔首部

除此之外,你還可以在指令之前加上數字,表示一次删除多行,如:

2dd表示一次删除2行

内容二:Linux下C語言程式設計基礎

實驗目的      
1. 熟悉Linux系統下的開發環境      
2. 熟悉vi的基本操作      
3. 熟悉gcc編譯器的基本原理      
4. 熟練使用gcc編譯器的常用選項      
5 .熟練使用gdb調試技術      
6. 熟悉makefile基本原理及文法規範      
7. 掌握靜态庫和動态庫的生成      
  1 Linux指令      
如果使用GUI,Linux和Windows沒有什麼差別。Linux學習應用的一個特點是通過指令行進行使用。      

登入Linux後,我們就可以在#或$符後面去輸入指令,有的時候指令後面還會跟着

選項

(options)或

參數

(arguments)。即Linux中指令格式為:

command [options] [                arguments         ]                 //中括号代表是可選的,即有些指令不需要選項也不需要參數          

選項

是調整指令執行行為的開關,

選項

不同決定了指令的顯示結果不同。

參數

是指指令的作用對象。

如ls指令,

ls

ls .

顯示是目前目錄的内容,這裡“.”就是參數,表示目前目錄,是預設的可以省略。我們可以用

ls -a .

顯示目前目錄中的所有内容,包括隐藏檔案和目錄。其中“-a” 就是選項,改變了顯示的内容,如下圖所示:

 GCC 的使用

一、GCC編譯器

gcc 支援編譯的一些源檔案字尾名      
字尾 源檔案
.c C語言源檔案
.C .cc .cxx C++源檔案
.m Object-C源檔案
.i 經過預處理後的C源檔案
.ii 經過預處理後的C++源檔案
.s .S 彙編語言源檔案
.h 預處理檔案(頭檔案)
.o 目标檔案
.a 存檔檔案

二、使用GCC的四個步驟

  • 預處理: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支援的檔案類型
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 幫助
    • gdb常用代碼指令
    • $gdb 
    • 這樣可以和gdb進行互動了。 
    • *啟動gdb,并且分屏顯示源代碼: 
    • $gdb -tui 
    • 這樣,使用了'-tui'選項,啟動可以直接将螢幕分成兩個部分,上面顯示源代碼,比用list友善多了。這時候使用上下方向鍵可以檢視源代碼,想要指令行使用上下鍵就用[Ctrl]n和[Ctrl]p. 
    • *啟動gdb調試指定程式app: 
    • $gdb app 
    • 這樣就在啟動gdb之後直接載入了app可執行程式,需要注意的是,載入的app程式必須在編譯的時候有gdb調試選項,例如'gcc -g app app.c',注意,如果修改了程式的源代碼,但是沒有編譯,那麼在gdb中顯示的會是改動後的源代碼,但是運作的是改動前的程式,這樣會導緻跟蹤錯亂的。 
    • *啟動程式之後,再用gdb調試: 
    • $gdb  
    • 這裡,是程式的可執行檔案名,是要調試程式的PID.如果你的程式是一個服務程式,那麼你可以指定這個服務程式運作時的程序ID。gdb會自動attach上去,并調試他。program應該在PATH環境變量中搜尋得到。 
    • *啟動程式之後,再啟動gdb調試: 
    • 這裡,程式是一個服務程式,那麼你可以指定這個服務程式運作時的程序ID,是要調試程式的PID.這樣gdb就附加到程式上了,但是現在還沒法檢視源代碼,用file指令指明可執行檔案就可以顯示源代碼了。 
    • **啟動gdb之後的互動指令: 
    • 互動指令支援[Tab]補全。 
    • *顯示幫助資訊: 
    • (gdb) help 
    • *載入指定的程式: 
    • (gdb) file app 
    • 這樣在gdb中載入想要調試的可執行程式app。如果剛開始運作gdb而不是用gdb app啟動的話可以這樣載入app程式,當然編譯app的時候要加入-g調試選項。 
    • *重新運作調試的程式: 
    • (gdb) run 
    • 要想運作準備調試的程式,可使用run指令,在它後面可以跟随發給該程式的任何參數,包括标準輸入和标準輸出說明符(<和> )和shell通配符(*、?、[、])在内。 
    • 參考資料:一、百度百科
    • 二、vaqeteart的部落格—常用gdb代碼大全

make工程管理器

  1. makefile是make讀入的唯一配置檔案

    在一個makefile中通常包含如下内容:

  1. 需要由make工具建立的目标體(target),通常是目标檔案或可執行檔案。
  2. 要建立的目标體所依賴的檔案(dependency_file);
  3. 建立每個目标體時需要運作的指令(command),這一行必須以制表符(Tab鍵)開頭。

    格式:

    target: dependency_files

                  command                                                                  make的指令行

指令格式 含義
-C dir 讀入指定目錄下的makefile
-f file 讀入目前目錄下的file檔案作為makefile
-i 忽略所有的指令執行錯誤
-I dir 指定被包含的makefile所有目錄
-n 隻列印要執行的指令,但不執行這些指令
-p 顯示make變量資料庫和隐含規則
-s 在執行指令時不顯示指令
-w 如果make在執行過程中改變目錄,則列印目前目錄名

作業

将實驗樓中的代碼中除了main函數外的代碼制作成一個靜态庫math.a和一個共享庫math.so;

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

建立函數靜态庫cal1.a:

5233楊光--Linux第二次實驗

将靜态庫cal1.a連結到main.o中并生成執行檔案cal1并執行

5233楊光--Linux第二次實驗

建立函數動态庫cal2.so

5233楊光--Linux第二次實驗

将靜态庫cal2.a連結到main.o中并生成執行檔案cal2并執行

5233楊光--Linux第二次實驗

建立靜态庫的makefile檔案

5233楊光--Linux第二次實驗

運作make管理器生成cal3執行檔案并執行

5233楊光--Linux第二次實驗

建立動态庫makefile檔案

5233楊光--Linux第二次實驗

運作make管理器生成cal4執行檔案并執行

5233楊光--Linux第二次實驗

遇到的問題

    設定斷點的問題上還不夠明白

    編譯時剛開始總不成功,後來發現是沒有head.h,補上後就沒問題了