Sunday, November 15, 2009
[VimGdb = vim + gdb] build vim from source with vimgdb patch
我想對於vim和gdb的搭配,最完美的組合莫過於vimgdb這個patch了。前一陣子在苦腦怎麼樣的環境會讓我操作gdb這個神器最順手呢?! 讓我能夠remote debugging在ARM開發板上的程式得心應手呢 ^^ ?! 先來張snapshot吧!
※你看,在PTT->LinuxDev版上,連宅色夫(jserv)大神都推薦,沒道理不用呀...囧rz
在X11(X-Window)的底下的話,DDD, Insight都還算順手,但這時就得在PC上跑個X Server (推薦 Xming: X Server for Windows),有點太浪費資源了,有時只為解個小bug,我想不用出動ddd, insight這種機絲吧。
在Console底下的話,我想 gdb --tui 或是 cgdb 就蠻好用了,但身為一個VIMer,若能將gdb整進vim就更完美了,果然你想到的東西,別人都想過了...也作好了...XD! Great,有現成的就直接拿來用啦。用過之後,越來越順手,反應速度當然也比ddd,insight這些x11的app快些,果然還是CLI模式順手呀。
Clewn(for gVim) / vimGdb(for Vim) 官網:
http://clewn.sourceforge.net/index.html
安裝過程很簡單,只要三個部驟。首先,去vim官網抓這包source code (vim-7.2.tar.bz2),接著抓vimgdb(for vim72)這個patch檔。最後就是先解開以上兩包,再上patch啦。官網教學在此,小結如下:
1. tar xjf vim-7.2.tar.bz2
2. tar xzf vimgdb72-1.14.tar.gz
3. patch -d vim72 --backup -p0 < vimgdb/vim72.diff
4. cd vim72
#重點是configure時,記得加上--enable-gdb這個參數
5. ./configure --enable-cscope --enable-gdb --enable-multibyte --disable-gui --enable-gui=no --without-x --disable-gpm --disable-nls --with-tlib=ncurses --enable-pythoninterp --prefix=/home/kent/usr/
6. make && make install
NOTE: 在Ubuntu 9.10 和 Snow Leopard (Mac OS X 10.6.2)底下build這vim時遇到了一個問題,build出來的vim,一跑起來就出現 *** buffer overflow detected ***: ./vim terminated ,後來Google之後,也有人遇到這個問題,後來繼續追下去,追到GNU gcc的bugzilla去了,有人發了一個bug給gcc : vim crashes on startup when compiled with -O3 but works with -O2,裡頭提到產生這問題的關鍵點,記錄一下,或許以後會遇到,最終這個bug被歸類為 "RESOLVED INVALID"
===============================================
NOTE: In Ubuntu 8.10 and later versions, -D_FORTIFY_SOURCE=2
is set by default, and is activated when -O is set to 2 or higher.
This enables additional compile-time and run-time checks for several
libc functions. To disable, specify either -U_FORTIFY_SOURCE or
-D_FORTIFY_SOURCE=0.
===============================================
The difference between -D_FORTIFY_SOURCE=1 and -D_FORTIFY_SOURCE=2
is e.g. for
struct S { struct T { char buf[5]; int x; } t; char buf[20]; } var;
With -D_FORTIFY_SOURCE=1,
strcpy (&var.t.buf[1], "abcdefg");
is not considered an overflow (object is whole VAR), while
with -D_FORTIFY_SOURCE=2
strcpy (&var.t.buf[1], "abcdefg");
will be considered a buffer overflow.
============================================
所以,在 Ubuntu 及 Snow Leopard 底下,若要build vim from source的話,請記得加上 CFLAGS="-O3 -D_FORTIFY_SOURCE=1",將我常用的configure參數記錄如下:
./configure --enable-multibyte --enable-cscope --disable-gui --enable-gdb --prefix=/Users/kent/usr/ CFLAGS="-O3 -D_FORTIFY_SOURCE=1"
17 Comments:
When: November 16, 2009 5:58 PM
您好:謝謝您這篇的教學,讓小弟獲益良多。但是,不知道為什麼.在下的 vimGDB 在執行 gdb 的視窗上會出現很多的 ^M 字元,請問這個該如何解決!!
圖片如下:
[img]http://files.myopera.com/mftsai/files/vimGDB.png[/img]
<(_ _)>
When: November 16, 2009 10:07 PM
您好
我也是VIM+gdb的愛用者
想請教您一下
要怎麼把視窗切成像您這樣呢
因為我預設都是上中下三欄
謝謝
When: November 16, 2009 10:10 PM
您好
我也是VIM+gdb的愛用者
想請教您一下
要怎麼把視窗切成像您這樣呢
因為我預設都是上中下三欄
謝謝
When: November 16, 2009 10:18 PM
@Anonymous(1F)
我也有遇到這個問題,我的第一張snapshot其實是我ssh到某台Linux工作站的操作畫面...XD,我也有在Ubuntu下build了一版vimgdb,也OK,唯獨在Mac OS X上遇到這個,原本想說會不會是gdb的版本太舊才造成的 (GNU gdb 6.3.50-20050815),自己抓source下來build看看,但有遇到些問題,沒有build起來,我也還沒仔細去看問題在哪,等我找到solution,再來Po文..
When: November 16, 2009 10:21 PM
@Anonymous(2F)
我有改過 gdb_mappings.vim 這個檔案,讓他預設啟用的layout就長這樣,供你參考看看:
http://github.com/chenkaie/DotFiles/blob/master/.vim/macros/gdb_mappings.vim
When: November 16, 2009 11:08 PM
是的,我也是嘗試著要去 compile gdb 6.6, 6.7, 7.0,但是在 Mac OS X 上都沒有辦法成功,難怪在 MacPorts 去的 gdb 6.8 已經不給用了。我想可能真的是 Mac 上 gdb 的版本的關係,希望版大可以找出解決的方式,期待版大的好消息。 ^^b
When: November 17, 2009 11:34 AM
您好
我是2F的
謝謝您的vim script
但是套用後 視窗好像一樣
只是多出了一個 gdb-variables 的window
所以視窗還是上中下四個
是有要安裝什麼外掛才會分開兩邊嗎
謝謝
When: November 17, 2009 12:55 PM
@6F
請再更新一下這個檔
http://github.com/chenkaie/DotFiles/blob/master/.vim/macros/gdb_mappings.vim
我少加了個參數進去,原本在我的vimrc裡,參看一下。
When: November 17, 2009 1:30 PM
謝謝你
成功了
When: January 31, 2010 7:59 PM
請問最下面那個有時間日期的欄位是怎麼做出來的?
When: March 06, 2010 6:55 PM
To Anonymous:
那是GNU Screen的功能,跟vim無關,若您也有使用screen的話,config檔改一下就OK囉!
When: March 23, 2010 9:18 PM
推Snow leopard灌完vim之後會出問題...Orz
補一下我的configure :P
sudo env CFLAGS="-O3 -D_FORTIFY_SOURCE=1" ./configure --enable-cscope --enable-gdb --enable-multibyte --disable-gui --enable-gui=no --without-x --disable-gpm --disable-nls --with-tlib=ncurses --enable-pythoninterp --prefix=/usr/
主要是CFLAGS要加在env之後才能在./configure :P
When: March 23, 2010 11:01 PM
@hamigwa,
那我也來update一下,我的最新configure , 發現跟你的長得差不多...囧rz
./configure --enable-gui=no --without-x --disable-gpm --disable-nls --with-tlib=ncurses --enable-multibyte --enable-cscope --enable-gdb --enable-pythoninterp --prefix=/home/kent/usr/ CFLAGS="-O3 -D_FORTIFY_SOURCE=1"
When: June 22, 2010 7:25 PM
您好,
這篇文章真是讓我受益良多,非常感謝。
我想請教一下,我啟動 vim 後,利用 call gdb("") 會出現 command line window,當按下 enter 鍵或者鍵入 gdb 後要很久 GDB window 才會出現。這時候,整個 vim 一整個無法作其他動作,像當掉一樣。
想請問您是否有碰過或解決過這個問題?
Thanks~
When: June 23, 2010 12:08 AM
@ Anonymous:
這倒是沒有遇過,建議你可以透過strace (Mac上用dtruss/dtrace)去attach你的vim看他這時候到底在做什麼事,就可以找出問題了。
dtruss/dtrace :
http://humberto.digi.com.br/blog/2008/02/25/strace-on-mac-os-x-leopard/
When: January 26, 2011 1:54 PM
請問一下
你會解決 OSX下
vimgdb 中有很多^M的問題了嗎??
謝謝
When: January 26, 2011 2:46 PM
@Anonymouse,
請見這篇( http://chenkaie.blogspot.com/2009/11/macsnow-leopard-build-gdb-v70-from.html
)最後想提到的:
"前一篇有個網友提到的擾人的"^M"符號的問題,果然從gdb v6.3.5升到gdb v7.0之後就迎刃而解了"
Plz Post a Comment / 拜託你留個言啦...^^"