//------------------------------------------------------------------------------------------------------------------------------------------------ 圖形GDB1.sudo apt-get install xxgdb 圖形GDB2.sudo apt-get install ddd 圖形GDB3.使用vimgdb補丁在vim中執行(強烈建議使用vimgdb調試程序,極其好用gliethttp_20080314) //------------------------------------------------------------------------------------------------------------------------------------------------ 一下文字轉載自:http://blog.csdn.net/easwy/archive/2007/10/17/1828678.aspx 本節所用命令的幫助入口: :help vimgdb 在UNIX系 統最初設計時,有一個很是重要的思想:每一個程序只實現單一的功能,經過管道等方式把多個程序鏈接起來,使之協同工做,以完成更強大的功能。程序只實現單一 功能,一方面下降了程序的複雜性,另外一方面,也讓它專一於這一功能,把這個功能作到最好。就好像搭積木同樣,每一個積木只提供簡單的功能,但不一樣的積木壘在 一塊兒,就能搭出大廈、汽車等等複雜的東西。 從UNIX系統(及其變種)的命令行就能夠看出這一點,每一個命令只專一於單一的功能,但經過管道、腳本等把這些命令揉合起來,就能完成複雜的任務。 VI/VIM的設計也聽從這一思想,它只提供了文本編輯功能(與Emacs的大而全恰好相反),並且正如你們所看到的,它在這一領域作的是如此的出色。 也正由於如此,VIM自身並不提供集成開發環境所需的所有功能(它也不許備這樣作,VIM只想成爲一個通用的文本編輯器)。它把諸如編譯、調試這樣功能,交給更專業的工具去實現,而VIM只提供與這些工具的接口。 咱們在前面已經介紹過VIM與編譯器的接口(見quickfix主題),VIM也提供了與調試器的接口,這一接口就是netbeans。除此以外,還能夠給VIM打一個補丁,以使其支持GDB調試器。咱們在本篇以及下一篇分別介紹這兩種方式。 因爲netbeans接口只能在gvim中使用,而打上vimgdb補丁後,不管在終端的vim,仍是gvim,均可以調試。因此我更喜歡打補丁的方式,本篇先介紹這種方法。 打補丁的方式,須要從新編譯VIM,恰好借這個機會,介紹一下VIM的編譯方法。我只介紹Linux上編譯方法,若是你想在windows上編譯vim,能夠參考這篇文檔: Vim: Compiling HowTo: For Windows 。 [ 下載VIM源代碼 ] 首先咱們須要下載VIM的源碼。到 http://www.vim.org/sources.php 下載當前最新的VIM 7.1的源代碼,假設咱們把代碼放到~/install/目錄,文件名爲vim-7.1.tar.bz2。 [ 下載vimgdb補丁 ] 接下來,咱們須要下載vimgdb補丁,下載頁面在: http://sourceforge.net/project/showfiles.php?group_id=111038&package_id=120238 在這裏,選擇vim 7.1的補丁,把它保存到~/install/vimgdb71-1.12.tar.gz。 [ 打補丁 ] 運行下面的命令,解壓源碼文件,並打上補丁: cd ~/install/ tar xjf vim-7.1.tar.bz2 tar xzf vimgdb71-1.12.tar.gz patch -d vim71 --backup -p0 [ 定製VIM的功能 ] 缺省的VIM配置已經適合大多數人,但有些時候你可能須要一些額外的功能,這時就須要本身定製一下VIM。定製VIM很簡單,進入~/install/vim71/src文件,編輯Makefile文件。這是一個註釋很好的文檔,根據註釋來選擇: - 若是你不想編譯gvim,能夠打開--disable-gui選項; - 若是你想把perl, python, tcl, ruby等接口編譯進來的話,打開相應的選項,例如,我打開了--enable-tclinterp選項; - 若是你想在VIM中使用cscope的話,打開--enable-cscope選項; - 咱們剛纔打的vimgdb補丁,自動在Makefile中加入了--enable-gdb選項; - 若是你但願在vim使用中文,使能--enable-multibyte和--enable-xim選項; - 能夠經過--with-features=XXX選項來選擇所編譯的VIM特性集,缺省是--with-features=normal; - 若是你沒有root權限,能夠把VIM裝在本身的home目錄,這時須要打開prefix = $(HOME)選項; 編輯好此文件後,就能夠編輯安裝vim了。若是你須要更細緻的定製VIM,能夠修改config.h文件,打開/關閉你想要的特性。 [ 編譯安裝 ] 編譯和安裝VIM很是簡單,使用下面兩個命令: make make install 你不須要手動運行./configure命令,make命令會自動調用configure命令。 上面的命令執行完後,VIM就安裝成功了。 我在編譯時打開了prefix = $(HOME)選項,所以個人VIM被安裝在~/bin目錄。這時須要修改一下PATH變量,以使其找到我編輯好的VIM。在~/.bashrc文件中加入下面這兩句話: PATH=$HOME/bin:$PATH export PATH 退出再從新登陸,如今再敲入vim命令,發現已經運行咱們編譯的VIM了。 [ 安裝vimgdb的runtime文件 ] 運行下面的命令,解壓vimgdb的runtime文件到你的~/.vim/目錄: cd ~/install/vimgdb/ tar zxf vimgdb_runtime.tgz –C~/.vim/ 如今啓動VIM,在VIM中運行下面的命令以生成幫助文件索引: :helptags ~/.vim/doc 如今,你可使用「:help vimgdb」命令查看vimgdb的幫助了。 至此,咱們從新編譯了VIM,併爲之打上了vimgdb補丁。下面我以一個例子來講明如何在VIM中完成「編碼—編譯—調試」一條龍服務。 [ 在VIM中調試 ] 首先確保你的計算機上安裝了GDB ,Vimgdb支持5.3以上的GDB版本,不過最好使用GDB 6.0以上的版本。 我使用下面這個簡單的例子,來示例一下如何在VIM中使用GDB調試。先來看示例代碼: 文件~/tmp/sample.c內容以下,這是主程序,調用函數計算某數的階乘並打印: /* ~/tmp/sample.c */ #include extern int factor(int n, int *rt); int main(int argc, char **argv) { int i; int result = 1; for (i = 1; i 文件~/tmp/factor/factor.c內容以下,定義了子函數factor()。之因此把它放到子目錄factor/,是爲了演示vim能夠自動根據調試位置打開文件,無論該文件在哪一個目錄下: /* ~/tmp/factor/factor.c */ int factor(int n, int *r) { if (n Makefile文件,用來編譯示例代碼,最終生成的可執行文件名爲sample。 # ~/tmp/Makefile sample: sample.c factor/factor.c gcc -g -Wall -o sample sample.c factor/factor.c 假設vim的當前工做目錄是~/tmp(使用「:cd ~/tmp」命令切換到此目錄)。咱們編輯完上面幾個文件後,輸入命令「:make」,vim就會根據Makefile文件進行編譯。若是編譯出錯, VIM會跳到第一個出錯的位置,改完後,用「:cnext」命令跳到下一個錯誤,以此類推。這種開發方式被稱爲quickfix,咱們已經在前面的文章中 講過,再也不贅述。 如今,假設已經完成連接,生成了最終的sample文件,咱們就能夠進行調試了。 Vimgdb補丁已經定義了一些鍵綁定,咱們先加載這些綁定: :run macros/gdb_mappings.vim 加載後,一些按鍵就被綁定爲調試命令(Vimgdb定義的鍵綁定見「:help gdb-mappings」)。按鍵能夠在按鍵的缺省定義和調試命令間切換。 好了,咱們如今按空格鍵,在當前窗口下方會打開一個小窗口(command-line窗口),這就是vimgdb的命令窗口,能夠在這個窗口中輸入任何合 法的gdb命令,輸入的命令將被送到gdb執行。如今,咱們在這個窗口中輸入「gdb」,按回車後,command-line窗口自動關閉,而在當前窗口 上方又打開一個窗口,這個窗口是gdb輸出窗口。如今VIM的窗口布局以下(我又按空格打開了command-line窗口): Tips: command-line窗口是一個特殊的窗口,在這種窗口中,你能夠像編輯文本同樣編輯命令,完成編輯後,按回車,就會執行此命令。你要重複執行某條命 令,能夠把光標移到該命令所在的行,而後按回車便可;你也能夠對歷史命令進行修改後再執行。詳見「:help cmdline-window」。 接下來,在command-line窗口中輸入如下命令: cd ~/tmp file sample 這兩條命令切換gdb的當前工做目錄,並加載咱們編譯的sample程序準備調試。 如今使用VIM的移動命令,把光標移動到sample.c的第7行和14行,按「CTRL-B」在這兩處設置斷點,而後按「R」,使gdb運行到咱們設置 的第一個斷點處(「CTRL-B」和「R」都是gdb_mappings.vim定義的鍵綁定,下面介紹的其它調試命令相同)。如今VIM看起來是這樣: 斷點所在的行被置以藍色,並在行前顯示標記1和2代表是第幾個斷點;程序當前運行到的行被置以黃色,行前以「=>」指示,代表這是程序執行的位置(顯示的顏色用戶能夠調整)。 接下來,咱們再按「C」,運行到第2個斷點處,如今,咱們輸入下面的vim命令,在右下方分隔出一個名爲gdb-variables的窗口: :bel 20vsplit gdb-variables 而後用「v」命令選中變量i,按「CTRL-P」命令,把變量i加入到監視窗口,用一樣的方式把變量result也加入到監視窗口,這裏能夠從監視窗口中看到變量i和result的值。 如今咱們按「S」步進到factor函數,VIM會自動打開factor/factor.c文件並標明程序執行的位置。咱們再把factor()函數中的變量n加入到監視窗口;而後按空格打開command-line窗口,輸入下面的命令,把變量*r輸入到變量窗口: createvar *r 如今,VIM看起來是這樣的: 如今,你能夠用「S」、「CTRL-N」或「C」來繼續執行,直至程序運行結束。 若是你是單步執行到程序結束,那麼VIM最後可能會打開一個彙編窗口。是的,vimgdb支持彙編級的調試。這裏咱們不用進行彙編級調試,忽略便可。 若是你發現程序有錯誤,那麼能夠按「Q」退出調試(gdb會提示是否退出,回答y便可),而後修改代碼、編譯、調試,直到最終完成。在修改代碼時,你可能 並不喜歡vimgdb的鍵映射(例如,它把CTRL-B映射爲設置斷點,而這個鍵又是經常使用的翻頁功能),你能夠按取消vimgdb的鍵映射,或者你直接修 改gdb_mappings.vim文件中定義的映射。 看,用VIM + GDB調試是否是很簡單?! 咱們能夠再定製一下,使調試更加方便。 打開~/.vim/macros/ gdb_mappings.vim文件,在「let s:gdb_k = 0」這一行下面加上這段內容: " easwy add if ! exists("g:vimgdb_debug_file") let g:vimgdb_debug_file = "" elseif g:vimgdb_debug_file == "" call inputsave() let g:vimgdb_debug_file = input("File: ", "", "file") call inputrestore() endif call gdb("file " . g:vimgdb_debug_file) " easwy end 在「let s:gdb_k = 1」這一行下面加上這段內容: " easwy add call gdb("quit") " end easwy 註釋掉最後一行的「call s:Toggle()」。 而後在你的vimrc中增長這段內容: """""""""""""""""""""""""""""" " vimgdb setting """""""""""""""""""""""""""""" let g:vimgdb_debug_file = "" run macros/gdb_mappings.vim 如今,在啓動vim後,按,就進入調試模式、定義調試的鍵映射。在第一次進入調試模式時,會提示你輸入要調試的文件名,之後就沒必要再輸入了。再按一次,就退出調試模式,取消調試的鍵映射。 利用VIM的鍵映射機制,你能夠把你喜歡的GDB命令映射爲VIM的按鍵,方便多了。映射的例子能夠參照~/.vim/macros/ gdb_mappings.vim。 再附上一張抓圖,這是使用putty遠程登陸到linux上,在終端vim中進行調試。這也是我爲何喜歡vimgdb的緣由,由於它能夠在終端vim中調試,而clewn只支持gvim: 由於我不常使用GDB調試,因此本文僅舉了個簡單的例子,以拋磚引玉。歡迎你們共享本身的經驗和心得。 最後,讓咱們感謝vimgdb做者xdegaye的辛勤勞動,咱們下一篇會介紹clewn,這是VIM與GDB結合的另一種形式,它和vimgdb同屬一個項目。 [參考文檔] 1. VIM幫助文件 2. http://vimcdoc.sourceforge.net/ 3. http://clewn.sourceforge.net/index.html [尾記] 本文能夠自由應用於非商業用途。轉載請註明出處。 原文連接: http://blog.csdn.net/easwy [版本] 15Oct07, easwy, v0.1, initial version 本文來自ChinaUnix博客,若是查看原文請點:http://blog.chinaunix.net/u1/40690/showart_1875942.html |