【Vim8.1.xから標準機能】VimからGDBを起動する方法(マウスでGDBを操作可能)
前書き
GDBをリッチなText User interface環境で実行するツールは、以前から複数ありました。例えば、
- CGDB:ViライクなキーバインドのGDBフロントエンド
- GDB TUI mode:EmacsライクなキーバインドのGDB標準のTUI環境(オプションtui)
- NeoDebug:Vim用GDBフロントエンドプラグイン。Vim標準(Termdebug)より高機能
などがあります。
上記のツールの(個人的な)デメリットは、
- CGDBは便利だが、Vim(+plugin)環境を完全に再現できない事
- GDB TUI modeは、OS標準GDBがサポートしていない可能性ある事
- NeoDebugは、本記事で紹介するVim標準機能より遥かに高機能だが、バグがある事。また、情報が少ない事
と、何点か挙げられました。
本記事で紹介するVim標準機能(termdebug)は、上記のデメリットがありません。普段使用しているVim(+plugin)の環境上でGDBを操作でき、操作に関する情報量も多いです。Breakpointをマウス操作で貼れます。
termdebugは使い勝手が良いため、本記事では導入方法と使い方について説明します。
検証環境
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
_,met$$$$$gg. nao@debian ,g$$$$$$$$$$$$$$$P. ---------- ,g$$P" """Y$$.". OS: Debian GNU/Linux 10 (buster) x86_64 ,$$P' `$$$. Kernel: 4.19.0-6-amd64 ',$$P ,ggs. `$$b: Uptime: 4 hours, 8 minutes `d$$' ,$P"' . $$$ Packages: 2474 (dpkg) $$P d$' , $$P Shell: fish 3.0.2 $$: $$. - ,d$$' Resolution: 2560x1080 $$; Y$b._ _,d$P' DE: Cinnamon 3.8.8 Y$$. `.`"Y$$$$P"' WM: Mutter (Muffin) `$$b "-.__ WM Theme: cinnamon (Albatross) `Y$$ Theme: BlackMATE [GTK2/3] `Y$$. Icons: gnome [GTK2/3] `$$b. Terminal: gnome-terminal `Y$$b. CPU: Intel i3-6100U (4) @ 2.300GHz `"Y$b._ GPU: Intel HD Graphics 520 `""" Memory: 3840MiB / 32060MiB |
Termdebug導入前の事前確認
Termdebugは、Vim8.1.x環境でterminal機能が無ければ、使用できません。バージョン確認およびterminal機能の有効・無効確認は、以下の手順で実施します。
1 2 3 4 5 6 7 8 9 |
$ vim --version VIM - Vi IMproved 8.1 (2018 May 18, compiled Jun 15 2019 16:41:15) (省略) $ vim (注釈):Vimの画面上で以下を入力。 :echo has('terminal') (注釈):出力が1であればterminal機能が有効、0ならば無効 |
仮に、Terminal機能がなかった場合は、vimを一度削除し、vim-noxパッケージを入れるか(Debian限定)、Vimの上流からのバックポートパッケージを利用して下さい(Debian, Ubuntu限定)。手順を以下に示します。
vim-noxを利用する場合
1 2 3 |
$ sudo apt remove vim $ sudo apt update $ sudo apt install vim-nox |
最新版(上流)のVimを利用する場合
1 2 3 |
$ sudo add-apt-repository ppa:jonathonf/vim (注釈):最新のVimを使用できるよう、リポジトリ追加 $ sudo apt update $ sudo apt install vim |
Termdebugを利用するための設定
Termdebugを利用するには、”~/.vimrc”ファイルに以下の3行を追加するだけです。
1 2 3 4 5 6 7 8 |
" termdebugプラグイン読み込み packadd termdebug " Vimの全モードでマウス操作を有効化 set mouse=a " GDBデバッグ時のWindow横幅サイズ指定 let g:termdebug_wide = 160 |
Termdebugの使い方
Vimを起動した後、”:Termdebug <デバッグ対象バイナリへのPATH>”でGDBとソースコードが同時に表示できます。”:Termdebug”部分をgdbコマンドに置き換えると、分かりやすいと思われます。
例えば、rpnバイナリをGDBデバッグする場合は、”:Termdebug rpn”とVim上で入力します。以下に起動後のイメージを示します。
上記のVim画像の右側がソースコード画面、左上がGDB画面、左下がプログラムのI/O画面です。GDB画面に移動(例:”Ctrl-w w”)すれば、GDBを操作できます。GDBを終了させれば、画面はソースコードのみ表示された状態に戻り、Window横幅も元の設定に戻ります。
ソースコード画面上部には、Step、Next、Finish、Cont、Stop、Evalと書かれたボタンがあり、このボタンをマウスで押下してGDBを操作します。ソースコードの任意の行で右クリックすれば、Breakpointの追加・削除、式の評価ができます。
Vim画面(Vimコマンド)でGDBを操作する場合は、下表のコマンドを使用します。より詳細な情報は、Vim公式日本語HPを確認して下さい。
コマンド | 説明 |
:Run [args] | [args] または以前の引数でプログラムを実行 |
:Break | 現在の行にBreakpointを設定 |
:Clear | 現在の行のBreakpointを削除 |
:Step | gdbのstepコマンドを実効 |
:Over | gdbのnextコマンドを実効 |
:Finish | gdbのfinishコマンドを実効 |
:Continue | gdbのcontinuコマンドを実効 |
:Stop | プログラムの中断 |
:Evaluate | カーソルの下の式を評価 |
:Evaluate {expr} | {expr}を評価 |
:Gdb | gdb画面に移動 |
:Program | デバッグ中のプログラムI/O画面に移動 |
:Source | ソースコード画面に移動 |
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。