linux三尖刀

来源:http://www.cnblogs.com/lang5230/archive/2016/05/26/5531900.html
-Advertisement-
Play Games

序 我們都知道,一個可執行程式的基本的生命過程是如此的: (編輯)源文件 >(編譯)目標文件 >(鏈接)可執行文件 >(調試排錯)穩定執行 所以,在這個過程中,我們很容易看得出。一個程式開發過程是離不開,編輯器,編譯器,調試器這三個工具的。 那麼vim,gcc(g++),gdb就是linux環境C/ ...


我們都知道,一個可執行程式的基本的生命過程是如此的:

(編輯)源文件--->(編譯)目標文件--->(鏈接)可執行文件--->(調試排錯)穩定執行

所以,在這個過程中,我們很容易看得出。一個程式開發過程是離不開,編輯器,編譯器,調試器這三個工具的。

那麼vim,gcc(g++),gdb就是linux環境C/C++編程三把尖刀,沒有他們的存在,江湖總是太過平靜了。

修習之劍vim

vim模式:

基本分類

①插入模式(可編輯,輸入字元狀態),②命令模式(底行模式),③視圖模式(v進入,可選定字元)

詳細分化

1.通常模式(n) 在其它任何一個模式下,用ESC或者 ctrl+c 鍵可以退到通常模式
2.插入模式(i) 在這個模式下,vim像一個常見的編輯器.在通常模式下,用i或者a可以進行本模式,當然,還有一些其它命令也可以.
3.可視模式(v) 在這個模式下,可以使用hjkl進行選擇.然後進行copy,paste或者其它操作. 在通常模式下,用v命令進行可視模式.
4.塊操作模式(V) 這是塊操作模式. 在通常模式下,用ctrl+v進入本模式.
5.修改模式(R) 這是改寫的模式.很多軟體法用insert鍵來完成這個切換.在vim中,從通常模式用R即可進入改寫模式.
6.擴展命令模式(ex) 這是命令執行模式 在通常模式下用:切換到此模式

模式切換:

模式下操作

普通模式下:

跳轉

  到行末   $

  到行首   ^

  到文件開始  gg

  到文件最後  G

  到第n行  nG

  ---以字元/行為單位跳轉

  游標移動 方向  h左  j下  k上   l右

  ---以單詞為單位跳轉

  上一個單詞b   下一個單詞w    本單詞末尾e

刪除

  刪除游標下字元:向後x(同插入模式下的del鍵)   向前X(同插入模式下的Backspace鍵)

  向前或者向後刪除一個字元也可以:   按d   按左右鍵

  向前或者向後刪除兩行:按d  按上下鍵

  刪除游標所在行dd

  刪除游標所在單詞dw

  刪除多行或者多個單詞  ndd          ndw

  替換單個字元(將源字元替換為x) rx

  將游標所在字元大小寫轉換   ~

複製粘貼

  複製行   yy

  複製單詞  yw(不忽略空格,連續空格算做一個單詞)

  複製n個單詞、行:nyy   nyw

  粘貼pp  多次粘貼npp

替換模式操作:

  普通模式輸入R進入之後操作(同插入模式下ins鍵)

視圖模式操作:

  普通模式按v進入

  eg刪除3個字元

  ①進入v模式,方向選取3個字元

  ②按x或者d刪除之

  eg 替換幾個字元為sss

  ①可視模式選取字元

  ②按r 按s   就將選定的字元都換位s字元了

命令模式:

  ①:進入命令模式

  ②輸入命令

  ③按下enter執行操作

主要命令有:

  環境設置eg 

  set number 顯示行號

  set nonnumber 取消顯示行號

  set tabstop=2 設置tab鍵等價空格數

  set shifwidth=2設置縮進為2個空格

  更多設置請在命令模式下輸入:help去學習

ps:將更多合適的 環境設置聚合在配置文件.vimrc中保持vim編輯器個性化

塊模式下操作:

  最常用用法-->>註釋一段代碼

  ps,當我們不熟悉塊操作之時,要註釋一段代碼,貌似只能在插入模式下一行一行的插入//

這麼做,很是低效費事。

  塊模式註釋一段代碼:

  ①按CTRL+V進入塊模式

  ②方向鍵選取需要註釋的行數

  

  ③按下I進入插入模式

  ④輸入//

  

  ⑤按esc退出

  

  至此,註釋完成,ps模塊模式的做法是,對應選取的塊,以行為單位,每個行都按格式進行操作

  取消註釋:

  進入塊模式後,用x或者d刪除一行中的字元,按esc退出。這裡就不上圖了

鍛造之劍gcc/g++

①man瞭解基本選項

  解釋:

  -E 預處理過程,得到.i文件,保存巨集替換,條件編譯處理之後的文件

  

  -S 編譯過程,獲得彙編代碼.s

  

  -c獲取目標文件

  -o獲取輸出文件,一般用於指定可執行文件。(中間生成文件也可以使用之指定filename)

  一個命令獲取以上過程文件

  gcc test.c   -save-temps

  

  註:gcc、g++預設是動態鏈接的,

  指定為靜態鏈接的參數  -static

  

更多選項(相關問題請參考linux環境編程相關章節)

  生成靜態鏈接庫

  ar -rcs test.a test.o

使用靜態鏈接庫

  gcc -o test main.c libstr.a

  或者 “-l 庫名”

  gcc -o test main.c -lstr

  指定靜態庫路徑

  gcc -o test main.c -L ./ -lstr

生成動態庫

  gcc -shared -Wl, -soname,libstr.so -o libstr.so.l string.c

  //-soname,libstr.so 表示生成動態庫別名為libstr.so

  //-o libstr.so.l 實際動態鏈接庫文件

  //-shared 表示生成的是一個動態鏈接文庫

  配置文件 /etc/ld.so.conf

  

  ldconfig -g顯示動態鏈接庫列表(緩存文件中的)

  ldconfig 目錄名   將該目錄中動態鏈接庫放入系統緩存文件/etc/ld.so.cache

    使用(同靜態鏈接庫的使用)

  gcc -o test main.c -L ./ -lstr

錘煉之劍gdb

最後我們來看看gdb的使用了

基本功能

  ①設置斷點b

  ②顯示變數print 

  ③單步執行 s(f11) n(f10) u(shift+f11)

  ④運行時修改變數值

  ⑤路徑跟蹤,堆棧調用展開bt

  

  ⑥線程切換

  info thread 獲取線程信息

  thread id 進入調試線程

 

簡單使用步驟

  ①編譯程式加入選項-g   

    gcc test.c -g

  ②調試可執行程式

    gdb a.out

  進入之後

  當程式需要命令行參數時

  ③(可選)set args 參數值1 參數值2  參數值3

  ④顯示源代碼l  (list 簡寫)

  ⑤斷點設置b main(breakpointer簡寫)可以設置斷點在行號,函數名,條件設置等

    eg  b  36 if i==2    當i==2時斷點

  ⑥執行 r (run)執行到斷點處停止

  列印變數p  value    (print value)

  監視變數display value (每次enter都會列印)

  其他命令

  斷點失效:

  enable b  編號

  

  i  列印信息

  info顯示   eg  

    info   b  顯示斷點信息

  file path   載入文件

  變數類型檢測 whatis value

  

  最後說一個命令,也就是上圖中的調試過程中顯示的代碼框架

  refresh

  最後,關於linux下的makefile下次再解


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • xx效果 具體代碼如下 首先新建XMGPushGuideView類 XMGPushGuideView.h 文件 #import <UIKit/UIKit.h>@interface XMGPushGuideView : UIView/** 載入xib */ +(instancetype)guideVi ...
  • 多態:相同的名稱,不同的類 使不同的類共用相同方法名稱的能力成為多態。它讓你可以開發一組類,這組類中的每一個類都能響應相同的方法名。每個類的定義都封裝了響應特定方法所需要的代碼,這使得它獨立於其他的類定義。這是因為Objective-C的運行時系統在執行方法時知道消息的接收者是哪個類的對象,它總是攜 ...
  • 下麵我從安卓開發的角度,簡單寫一下如何獲取手機設備信息和手機號碼 準備條件:一部安卓手機、手機SIM卡確保插入手機里、eclipse ADT和android-sdk開發環境 第一步:新建一個android工程(JinshanTest), 並需要在工程的AndroidManifest.xml文件中,添 ...
  • 檢測oracle資料庫壞塊的辦法: 1、使用DBV(DB File Verify)工具; 2、使用RMAN(Recovery Manager)工具; DBV(DB File Verify)工具: 外部命令,物理介質數據結構完整性檢查; 只能用於數據文件(offline或online),不支持控制文件 ...
  • BASH:是GNU的Bourne Again Shell,是GNU操作系統上預設的Shell。 Bourne Shell:是貝爾實驗室開發的Shell。 Korn Shell:是對Bourne Shell的發展,在大部分內容上與Bourne Shell相容。 C Shell:是SUN公司Shell的 ...
  • 結束了對xilinx-arm-linux交叉編譯鏈安裝後,總結一下整個過程,方便後來的研究者們,少走點彎路。 關於xilinx-arm-linux交叉編譯鏈的安裝,網上一搜一大把,可是有的資料中的資源老舊,有的已經無法下載了。有的方法自己測試後並不能工作,因此,在這裡系統的寫個說明。 首先,說明為什 ...
  • 說一下剛學習uCOS的心得1)首先強調一下實時操作系統(RTOS)的特點,最明顯的是提供及時響應和高可靠性2)基於實施操作系統的應用程式設計中,其中很重要的一個概念是"任務",任務設計也就是任務函數的設計是整個整 個應用程式的基礎,其他軟體設計工作都是圍繞來展開的3)用戶任務函數中,必須包含至少一次 ...
  • 看啥都不會的菜鳥怎麼進行vim配置 如果你想讓你的vim和VS差不多你一定需要這個網址 http://www.open-open.com/lib/view/open1429884437588.html 在開始使用Linux之後,一定不可避免的使用vim編輯器,一開始使用的時候vim可能不太友好(一定 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...