<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    Linux開發工具的使用

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

     

    1. 1.   Linux開發工具的使用
      1. Vim編譯的使用
      2. Gdb調試工具的使用
      3. Makefile的編寫
      4. linux跟蹤調試
      5. SSH的使用
      6. subversion的使用

     

     

    1.   Linux開發工具的使用

    Vim編譯的使用

    Ibm的Vim 實用技術

    http://www.ibm.com/developerworks/cn/linux/l-tip-vim1/index.html

    http://www.ibm.com/developerworks/cn/linux/l-tip-vim2/index.html

    http://www.ibm.com/developerworks/cn/linux/l-tip-vim3/index.html

     

    l         跳轉命令:

    ^,$        光標移動至行首、行尾

    (,)         一句話的最前面、最后面

    {,}        一個段落的最前面、最后面

    H          跳到第一行

    M          跳到中間一行

    L          跳到最后一行

    gg         跑到文件開頭

    G          跑到文件結尾

     

    查找命令

    /?查詢,  s/查找內容/替換內容

     

    編輯命令

    復制:     y復制選擇的內容、yy復制一行、nyy復制n行

    剪貼       d

    粘貼:     p; ]p代碼粘貼

    刪除:     d刪除選擇的內容、dd刪除一行、dw刪除一個單詞

    取消:     u

    更改:     cw更改光標所在位置的一個字

     

    刪除或稱謂剪貼

    db 刪除到某個單詞的開始位置

    d) 刪除到某個語句的結尾位置

    d( 刪除到某個語句的開始位置

    d} 刪除到某個段落的結尾位置

    d{ 刪除到某個段落的開始位置

    D 刪除到某一行的結尾=d$

     

    修改

    cl 更改當前字符(等于先按x再按i)

    cw 修改到某個單詞的結尾位置(dw再i)

    cb 修改到某個單詞的開始位置(db再i)

    <<         代碼向前移動

    >>         代碼向后移動

     

     

     

    窗口命令

    :split/vsplit  分隔一個窗口

    :new/vnew      創建一個新的窗口

    :sf 文件名     在新窗口中打開filename

    :only          關閉除當前窗口外所有窗口

    :ctrl-w        可進行切換窗口

    :ctrl-w h      到左面的窗口

    :ctrl-w l      到右面的窗口

    :ctrl-w j      到下面的窗口

    :ctrl-w k      到上面的窗口

     

     

     

    set paste //在粘貼之前使用該命令, 就不會在粘貼的時候將格式搞亂,粘貼之后再使用set nopaste即可將自動格式命令打開 set complete+=k // 自動完成? setlocal omnifunc=syntaxcomplete#Complete        //"打開語法打開補全 dw,剪切單詞。d$,剪切到行尾。d0,剪切到行首。[n]dd,剪切一行或下面n行。 yw,復制單詞。y$,復制到行尾。y0,復制到行首。[n]yy,復制一行或下面n行。     寫代碼的時候的快捷鍵:     ]p:和 p 的功能差不多,但是它會自動調整被粘貼的文本的縮進去適應當前代碼的位置。     gd:定位到局部變量聲明處     K:在 Man 里面查找光標當前所在處的詞,顯示光標下的C函數的man說明手冊     ^P/^n 自動完成功能;如果沒有合適的就一直按C-P/N     ^]:顯示~/.tags中的光標下的函數的原型,     ^t:退出函數的原型窗口     在編譯一個文件時候同時打開另外一個文件 :sp                      [filename] CTRL-W h                 跳轉到左邊的窗口 CTRL-W j                 跳轉到下面的窗口 CTRL-W k                 跳轉到上面的窗口 CTRL-W l                 跳轉到右邊的窗口     生成C語言標準函數庫的tag文件 ctags -R -f ~/.vim/systags --c-kinds=+p --fields=+S /usr/include /usr/local/include  再在.vimrc加上 ctags+=~/.vim/systags  這樣每次生成ctags只生成本工程下的,但使用時卻又能包括標準接口。    $ctags -R *   (將當前目錄和子目錄中的文件生成tag) $vi -t find   (在目錄中查詢find函數) :ts   find    (查看find函數) :ta   find    (查看find函數)  

     

    Gdb調試工具的使用

    gdb代碼調試參考

    http://fanqiang.chinaunix.net/program/other/2005-03-23/2993.shtml   1. 設置斷點 (gdb)b test.c:17     //表示在17行設置斷點 (gdb)b test.c:func  //表示在test.c文件中func函數開始的地方設置斷點 (gdb)b test.c:21 if result==20 //斷點的觸發的條件是result==20 (gdb)info b            //查看斷點的信息 (gdb)delete、enable、disable、clear、// 維護斷點   run[r]//運行 continue[c] //繼續運行 next[n]      //下一條語句;不會進出函數內部 step[s]      //會進出調用的函數內部 finish         //退出函數   注意:在輸入b按兩次tab鍵,會列出所有以b開頭的命令     2. 查看斷點變量內容 backtrace[bt]//打印當前的函數調用棧的所有信息 bt n             //是一個正整數,表示只打印棧頂上n層的棧信息                   //-n表一個負整數,表示只打印棧底下n層的棧信息 frame(f) n    //表示查看當前棧某層信息 info f           //打印出更為詳細的當前棧層的信息; info args      //打印出當前函數的參數名及其值 info locals    //打印出當前函數中所有局部變量及其值 info catch    //打印出當前的函數中的異常處理信息   @   //操作數組 (gdb)p/c *array@10   //打印array后面10個字符的內容,按照字符查看 (gdb)p/x *array@10   //按照16進制查看 (gdb)p  this              //查看this的數據   ::  //指定某文件、類、函數中的變量 (gdb)p "test.c"::m_test      //查看test.c文件中的變量 {}     //一個內存地址為type的對象   3.查看源代碼 (gdb)l n,fun             //顯示程序第n行或某函數周圍的代碼 (gdb)l CTest::get_count  //查看CTest類中get_count函數  

     

    Makefile的編寫

     

    make的基本介紹[Makefile]

    make是一個有規則的文本文件,每個規則由三部分組成:目標、依賴文件、命令列表 target: dep1 dep2 dep3 ...     command1     command2     ...... 注意:每個命令前面是制表符不能用空格代替!   例如: ipphone : ipphone.o     gcc -o ipphone ipphone.o ipphone.o: ipphone.c ipphone.h     gcc -c ipphone.c ctl: ctl.o     gcc -o ctl ctl.o ctl.o: ctrl.c ipphone.h     gcc -c ctl.c 上面有四個規則;如果make命令行中沒有包含規則名就會檢查所有的規則,如果有則只檢查該規則,例如只想生成ctl文件需要make ctl即可!   偽目標
    例如:all: ctl ipphone //這是因為all并不存在它只是檢查ctl和ipphone作用 例如:clean: rm -f *.o //由于沒有依賴文件所以缺省不會執行,可通過 make clean執行   make定義變量和使用變量
    為了make文件的編輯和維護更方便,可在make中定義變量、和shell一樣;make文件中的變量內容實際是一個字符串,定義和使用規則同shell差不多。   CC=gcc -c  使用的時候和shell類似用括號擴起來前面加$;$(CC)  變量定義時候引用了自己make會遞歸展開引發錯誤:   make提供的只讀變量: $@      目標文件名 $<       第一個相關的文件名 $^      相關文件列表、以空格分開 $?       新于目標文件的相關文件列表 $(@D) 目標文件名的目錄部分 $(@F) 目標文件名的文件名部分   make預定義變量:
    AS 匯編器 CC C編譯器,缺省cc CPP C預處理器,缺省值cpp RM 文件刪除程序,缺省rm -f     隱含規則和規則模式
    例如:ipphone : ipphone.o gcc -o ipphone ipphone.o 該規則沒有指出ipphone.o怎么得來,這就適合隱含規則make會自動使用 gcc -c ipphone.c -o ipphone.o命令生成ipphone.o文件。這個規則也可通過%.o : %.c重新定義、表示所有的.o文件都是通過.c文件編譯而來;或者通過下面的方式重定義: %.o : %.c   $(CC) -c $< -o $@ //表示使用第一個相關的文件名來生成目標文件名   make命令行的選項:
    -f 指定make文件名不適用缺省值 -n 顯示所有要執行的命令,但不執行 -s 執行時不顯示命令 -r 禁止make內部規則 -d 顯示調試信息 -i 忽略規則的命令錯誤,繼續執行 -k 忽略模塊編譯錯誤、繼續下面的編譯   編譯的參數 參數信息
    -Wall:          輸出所有的警告信息。
    -O:              在編譯時進行優化。
    -g:               表示編譯debug版本。  
    基本寫法  filestat: filestat.o
        gcc filestat.o -o filestat filestat.o:
        gcc -c filestat.c clean:
        rm -fr *.o *~ *.*~ filestat ---------------------------------------------- 改善之后的寫法 object = filestat.o        // 使用目標文件
    cc = gcc                    // 編譯器定義
    cflags = -Wall -O -g     // 編譯條件   filestat: $(object)                          // 由.o文件連接成   程序文件
        $(cc) $(object) -o filestat filestat.o:                                     // 由.c文件編譯成   目標文件
        $(cc) $(cflag)  -c filestat.c -o filestat.o clean:
        rm -fr *.o *.*~ *~ filestat ----------------------------------------------optimization
    cc = gcc
    cflag = -Wall -O -g
    TARGET = ./filestat

    OBJECTS = $(patsubst %.c,%.o,$(wildcard *.c))  //將當前路徑中所有.c文件擴展替換為

     

                wildcard( %.c); #將目錄中所有以.c后綴的文件名,存入一個列表變量中             patsubst( %.c, %.o, listvar);  #表示將listvar中所有以.c為后綴的文件,改為以.o為后綴文件

     

     

    %.o: %.c
        $(cc) $(cflag) -c $< -o $@            //采用gcc -cflag -c第一個相關聯的文件 -o 目標文件 $(TARGET): $(OBJECTS)                 
        $(cc) $(OBJECTS) -o $(TARGET)     //將當前.o文件連接成目標程序文件
        chmod a+x $(TARGET)
    subsystem:
        cd subdir && $(MAKE)                   // 進入子目錄進行make
    clean:
        rm -fr *.o $(TARGET) *~  

     

    ======================================================

     

    在test下,建立a.c和b.c2個文件,在sub目錄下,建立sa.c和sb.c2 個文件 建立一個簡單的makefile src=$(wildcard *.c ./sub/*.c) dir=$(notdir $(src)) obj=$(patsubst %.c,%.o,$(dir) ) obj2=$(dir:%.c=%.o) all:  @echo $(src)  @echo $(dir)  @echo $(obj)  @echo $(obj2)  @echo "end"   第一行輸出:wildcard把指定目錄 ./ 和 ./sub/ 下的所有后綴是c的文件全部展開。 a.c b.c ./sub/sa.c ./sub/sb.c   第二行輸出:notdir把展開的文件去除掉路徑信息 a.c b.c sa.c sb.c   第三行輸出:patsubst把$(dir)中的變量符合后綴是.c的全部替換成.o, a.o b.o sa.o sb.o   第四行輸出:把變量dir中的每一個值結尾用o替換掉c a.o b.o sa.o sb.o    

     


    linux跟蹤調試

     

    -Wall 使用它能夠使GCC產生盡可能多的警告信息   1、Linux下的大多數函數都默認:    頭文件放到/usr/include/目錄下    而庫文件則放到/usr/lib/目錄下    -I 選項:增加頭文件目錄    -L 選項:增加庫文件目錄     gdb調試程序   1.顯示數據:print或p 變量print *指針 2.查看數組:人為數組:查看內存中變量h后面的10個整數: print h@10 3.設置斷點:b line-or-func if testvalue==100   顯示斷點:info b   刪除斷點:delete b 1 4.執行: next:單步執行 setp:進入一個內部函數 finish:跳出該內部函數 list列出下面要執行的源代碼 run 開始調試程序 set 變量//給該變量賦值 pype 顯示一個數據結構的內容(C的結構或函數) p/x  i //按16進制顯示變量內容,/c按字符/ x/   //examine簡拼為x,n是內存的長度,f 表示顯示的格式,u 表示從當前地址往后請求的字節數       x/3uh 0x54320//表示查看0x54320后面3個字節長度按照無符號   自動顯示: display display/ display/

     

     
    SSH的使用
    Linux與Linux之間傳送文件: scp LocalFile  username@remoteIP:[path or remoteFile] scp p2p-tracker root@124.127.108.231:/usr/share/p2p-tracker/    

    subversion的使用

    安裝subversion sudo apt-get install subversion subversion-tools

     

    1、將文件checkout到本地目錄

    svn checkout path(path是服務器上的目錄)
        例如:svn checkout svn://192.168.1.1/pro/domain     #表示將url中的文件checkout到本地
        簡寫:svn co

    2、往版本庫中添加新的文件

      svn add file
       例如:svn add test.php(添加test.php)                   #將test.php添加到svn上面,其路徑是當前目錄所在svn路徑                                                          #add之后commit才能真正將文件加入到svn上面

    3、將改動的文件提交到版本庫

    svn commit -m "LogMessage" 
    例如:svn commit -m "add file" test.php                #只提交test.php文件
    例如:svn ci                                           #提交當前目錄所有的文件

    4、加鎖/解鎖

      svn lock -m "LockMessage" [--force] PATH
       例如:svn lock -m "lock test file" test.php
            svn unlock PATH

    5、更新到某個版本

      svn update -r m path
       例如:
          svn update如果后面沒有目錄,默認將當前目錄以及子目錄下的所有文件都更新到最新版本。
         svn update -r 200 test.php(將版本庫中的文件test.php還原到版本200)
         svn update test.php(更新,于版本庫同步。如果在提交的時候提示過期的話,是因為沖突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
       簡寫:svn up

    6、查看文件或者目錄狀態

      1)svn status path(目錄下的文件和子目錄的狀態,正常狀態不顯示)
       【?:不在svn的控制中;M:內容被修改;C:發生沖突;A:預定加入到版本庫;K:被鎖定】
      2)svn status -v path(顯示文件和子目錄狀態)
       第一列保持相同,第二列顯示工作版本號,第三和第四列顯示最后一次修改的版本號和修改人。
       注:svn status、svn diff和 svn revert這三條命令在沒有網絡的情況下也可以執行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。
    簡寫:svn st

    7、刪除文件

      svn delete path -m "delete test fle"
       例如:svn delete svn://192.168.1.1/pro/domain/test.php -m "delete test file"
        或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推薦使用這種
    簡寫:svn (del, remove, rm)

    8、查看日志

      svn log path
       例如:svn log test.php 顯示這個文件的所有修改記錄,及其版本號的變化

    9、查看文件詳細信息

      svn info path
       例如:svn info test.php

    10、比較差異

      svn diff path(將修改的文件與基礎版本比較)
       例如:svn diff test.php
    svn diff -r m:n path(對版本m和版本n比較差異)
       例如:svn diff -r 200:201 test.php
       簡寫:svn di

    11、將兩個版本之間的差異合并到當前文件

      svn merge -r m:n path
       例如:svn merge -r 200:205 test.php(將版本200與205之間的差異合并到當前文件,但是一般都會產生沖突,需要處理一下)

    12、SVN 幫助

      svn help
    svn help ci

    ——————————————————————————

    以上是常用命令,下面寫幾個不經常用的

    ——————————————————————————

    13、版本庫下的文件和目錄列表

      svn list path
       顯示path目錄下的所有屬于版本庫的文件和目錄
    簡寫:svn ls

     

    14、創建納入版本控制下的新目錄

     

    svn mkdir: 創建納入版本控制下的新目錄。
    用法: 1、mkdir PATH…
             2、mkdir URL…
    創建版本控制的目錄。
    1、每一個以工作副本 PATH 指定的目錄,都會創建在本地端,并且加入新增
         調度,以待下一次的提交。
    2、每個以URL指定的目錄,都會透過立即提交于倉庫中創建。
    在這兩個情況下,所有的中間目錄都必須事先存在。

     

     

    15、恢復本地修改

     

    svn revert: 恢復原始未改變的工作副本文件 (恢復大部份的本地修改)。revert:
    用法: revert PATH…
    注意: 本子命令不會存取網絡,并且會解除沖突的狀況。但是它不會恢復
            被刪除的目錄

     

     

    16、代碼庫URL變更

     

    svn switch (sw): 更新工作副本至不同的URL。
    用法: 1、switch URL [PATH]
            2、switch –relocate FROM TO [PATH...]

    1、更新你的工作副本,映射到一個新的URL,其行為跟“svn update”很像,也會將
         服務器上文件與本地文件合并。這是將工作副本對應到同一倉庫中某個分支或者標記的
         方法。
    2、改寫工作副本的URL元數據,以反映單純的URL上的改變。當倉庫的根URL變動 
        (比如方案名或是主機名稱變動),但是工作副本仍舊對映到同一倉庫的同一目錄時使用
        這個命令更新工作副本與倉庫的對應關系。

     

     

    17、解決沖突

     

    svn resolved: 移除工作副本的目錄或文件的“沖突”狀態。
    用法: resolved PATH…
    注意: 本子命令不會依語法來解決沖突或是移除沖突標記;它只是移除沖突的
            相關文件,然后讓 PATH 可以再次提交。

     

     

    18、輸出指定文件或URL的內容。

     

    svn cat 目標[@版本]…如果指定了版本,將從指定的版本開始查找。
    svn cat -r PREV filename > filename (PREV 是上一版本,也可以寫具體版本號,這樣輸出結果是可以提交的)

     

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全