2009年10月20日 星期二

關於 vim + gdb

有朋友問 vim 如何整合 gdb ,這是個好問題。 其實 vim 裡頭可以開啟 shell 來呼叫外部程式。但是這個作法實在不大好。 output 很容易亂掉編輯畫面,再者,也不方便 scroll 輸出的訊息。

其實是有簡單的解法的。基本上,我們可以利用 screen 的 share 功能來從外部送一些相關指令餵給 Terminal 的 gdb shell 或是利用簡單的 IPC 來操作外部程式,譬如說 設定 breakpoint , step , continue ... 等等功能。

再延伸一點,這麼多指令,肯定很容易衝突到其他的 key mapping ,要不,就是得延長 key mapping 的序列才行。所以可以透過 augroup 來在特定的情況下,將一整組 key mapping override 現有的 key mapping ,在不需要的時候再把這些 key mapping unmap 掉。

這邊先賣一下關子,有空再來寫。 XD 時候不早了,先去睡覺。 XDD

10 則留言:

  1. 最近剛好在玩vim + gdb,其實有個現成的工具可用就稱為: vimGdb,推薦一下,蠻好上手的!

    回覆刪除
  2. 其實我才在想說要真正能夠整合好 gdb 進 vim 也只能直接 patch vim 了。

    沒想到真的有這個東西。 :p

    回覆刪除
  3. 剛才看了一下 vimgdb, 還真的是只有 source code patch 的 diff 而已。

    不過我是從 subversion 裝的,這東西不知道 apply 下去會怎麼樣,有空再來弄好了。

    回覆刪除
  4. Ya,,只要上個patch檔就可以無痛升級了...XD。
    尤記得,當時..(忘了哪個rev了)我試過從vim svn trunk最新版的上過這patch,似乎不是那麼順利,後來沒時間下去看
    後來,就直接抓vim7.2版的tar檔,然後再上vimgdb sourceforge上抓vimgdb72-1.14版,patch直接上,perfect...

    這樣的組合測試是OK的。
    要不然10000多行的patch慢慢去追去問題,可能也要花點時間 ^^

    回覆刪除
  5. 有一個plugin可用:Conque shell
    打:Conque gdb就可以叫出gdb了 ^ ^
    他也可以叫出shell(:Conque bash)不過tab的自動完成會有問題...(可能和我設tab->space有關)

    另一個完成度比較高的選擇是vimshell這個patch,只支援到vim7.0...而且multibyte, xterm256都不支援。不過他真的可以做出一個完整的shell喔,只用ascii和16色的xterm的話這是個還不錯的選擇^ ^

    如果要選gdb的話用cgdb比gdb好,有標色,分割視窗看source,跳檔也方便,是我目前看過最漂亮的CLI gdb

    Conque只支援gdb,不能用cgdb(畫面會爆掉)
    vimshell 可以用cgdb(因為他製造的shell比較完整..)

    回覆刪除
  6. 原來是鄉民dryman難怪,內容這麼熟悉,vimshell只support到vim7.0沒再繼續更新,害我失望了...
    cgdb 的確不錯,在我接觸了vimgdb這個新歡之後,cgdb這個舊愛就被我拋棄了...XD

    回覆刪除
  7. 耶...我想問一下樓上用vimgdb是用CLI的嗎?
    我看他的說明是要先啟動vim為server,取個server name,然後再鍵入:!vimgdb --servername=你取的名字。

    可是compile的版本不知道為什麼沒有+clientserver的選項,./configure的設定中也沒辦法設(明明應該把這選項設在FEATURE=normal內的..)

    所以到現在我都沒辦法在CLI底下開啟vimgdb...

    話說回來我還是很愛cgdb,因為跨檔設tag等功能實在是太棒了XDD

    回覆刪除
  8. @dryman
    我用的是vimgdb(for vim),我想你是使用clewn(for gVim),所以是透過netBeans socket介面來控制,才會有server name那東西。
    vimgdb不太算CLI,他不是在shell下指令,而是已經整進vim裡,是在vim一個split window裡,下指令,抓個圖給你看看...
    http://farm3.static.flickr.com/2566/4037721844_6dcefcb09d_o.png

    我們兩在這洗"吸久A濕大"的版面,不知之後會不會被Ban ID ...XD

    回覆刪除
  9. 話說我終於想到之前沒用 vimgdb 的原因
    因為他要用 patch....

    一直在想如果可以抽出一個 generic 的東西,應該是可以 apply 到 vim 的 repository 裡面。

    vimgdb 看起來真的不錯,我會手癢。不過我現在幾乎都沒寫 c 了。

    這陣子又用到是為了要 debug perl 的 xs module。:p

    回覆刪除