Kaie"s Blog 2.0 beta!
Back to "Top"

My Secret Notebook
 Show "Table of Contents"
Contact Me
Subscribe to my Posts feed
Subscribe to my Comments feed
My Flickr
Back to "Top"
My Secret Notebook
 Show "Table of Contents"
Contact Me
Subscribe to my Posts feed
Subscribe to my Comments feed
My Flickr

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:

Who: Anonymous Class:
When: November 16, 2009 5:58 PM  

您好:謝謝您這篇的教學,讓小弟獲益良多。但是,不知道為什麼.在下的 vimGDB 在執行 gdb 的視窗上會出現很多的 ^M 字元,請問這個該如何解決!!

圖片如下:

[img]http://files.myopera.com/mftsai/files/vimGDB.png[/img]

<(_ _)>

Who: Anonymous Class:
When: November 16, 2009 10:07 PM  

您好

我也是VIM+gdb的愛用者
想請教您一下
要怎麼把視窗切成像您這樣呢
因為我預設都是上中下三欄

謝謝

Who: Anonymous Class:
When: November 16, 2009 10:10 PM  

您好

我也是VIM+gdb的愛用者
想請教您一下
要怎麼把視窗切成像您這樣呢
因為我預設都是上中下三欄

謝謝

Who: Tsung-Kai Chen Class:
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文..

Who: Tsung-Kai Chen Class:
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

Who: Anonymous Class:
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

Who: Anonymous Class:
When: November 17, 2009 11:34 AM  

您好

我是2F的

謝謝您的vim script

但是套用後 視窗好像一樣

只是多出了一個 gdb-variables 的window

所以視窗還是上中下四個

是有要安裝什麼外掛才會分開兩邊嗎

謝謝

Who: Tsung-Kai Chen Class:
When: November 17, 2009 12:55 PM  

@6F
請再更新一下這個檔
http://github.com/chenkaie/DotFiles/blob/master/.vim/macros/gdb_mappings.vim
我少加了個參數進去,原本在我的vimrc裡,參看一下

Who: Anonymous Class:
When: November 17, 2009 1:30 PM  

謝謝你

成功了

Who: Anonymous Class:
When: January 31, 2010 7:59 PM  

請問最下面那個有時間日期的欄位是怎麼做出來的?

Who: Tsung-Kai Chen Class:
When: March 06, 2010 6:55 PM  

To Anonymous:
那是GNU Screen的功能,跟vim無關,若您也有使用screen的話,config檔改一下就OK囉!

Who: hamigwa Class:
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

Who: Tsung-Kai Chen Class:
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"

Who: Anonymous Class:
When: June 22, 2010 7:25 PM  

您好,

這篇文章真是讓我受益良多,非常感謝。

我想請教一下,我啟動 vim 後,利用 call gdb("") 會出現 command line window,當按下 enter 鍵或者鍵入 gdb 後要很久 GDB window 才會出現。這時候,整個 vim 一整個無法作其他動作,像當掉一樣。
想請問您是否有碰過或解決過這個問題?

Thanks~

Who: Tsung-Kai Chen Class:
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/

Who: Anonymous Class:
When: January 26, 2011 1:54 PM  

請問一下

你會解決 OSX下

vimgdb 中有很多^M的問題了嗎??

謝謝

Who: Tsung-Kai Chen Class:
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之後就迎刃而解了"