*debug.txt* For Vim バージョン 8.1. Last change: 2019 May 107 VIMリファレンスマニュアル by Bram Moolenaar
Vim のデバッグ
Vim のデバッグ方法についての說明です。Vim script や函數などのデバッグについては、|debug-scripts| を參照してください。
1. gcc と gdb を使つてクラッシュの場所を特定する | |debug-gcc| |
2. メモリリークの檢出 | |debug-leaks| |
3. Windows でのバグレポート | |debug-win32| |
テストファイルで Vim がクラッシュした場合、gcc を使つてゐるなら、以下の方法で場所を特定できます。MinGW でも同じやうにできます。
cd testdir gdb ../vim run -u unix.vim -U NONE -s dotest.in test11.in
where
次のコマンドで別の場所のスタックトレースを表示できます:
frame 3
"3" のところにスタックトレースの番號を指定してください。
もし Vim がメモリリークを起こしてゐるやうな感じがして、そしてあなたが Linux を使つてゐるなら、valgrind ツールを使ふことでメモリリークをピンポイントで檢出することができます。
まづ、Vim を EXITFREE の定義付きでビルドします。MAKEFILE を檢索して該當行のコメントを外してください。
次のコマンドで Vim を起動してください:
valgrind --log-file=valgrind.log --leak-check=full ./vim
Note:
Vim の實行はとても遲くなります。.vimrc が大きかつたり多くのプラグインを入れてゐたりすると起動にとても時閒がかかるので、その場合は "–clean" 引數を指定して起動してみてください。
ライブラリがメモリリークを起こしてゐる場合もあります。例へば getpwuid() や XtVaAppCreateShell() などです。それらを避けることはできません。リークしてゐるバイト數は數キロバイト以下のはずです。
Windows版の Vim が再現可能な手段でクラッシュした場合、次の方法で有用なバグレポートを作成できます。
實行ファイルに對應したデバッグシンボルファイル (PDB) を用意してください。gvim.exe には gvim.pdb、vim.exe には vim.pdb が必要です。あなたが實行ファイルを入手したのと同じ場所に用意されてゐるはずです。EXE に對應した (同じ日附の) PDB でなければいけません。
Microsoft Visual C++ コンパイラを使つて自分で實行ファイルを作成した場合は、PDB は EXE といつしよに作成されてゐます。
Visual Studio を持つてゐる場合はそれを使つてください。VC Toolkit と WinDbg は必要ありません。
他のコンパイラを使つてゐる場合は、それぞれ適切なデバッガを使つてください。Cygwin または MinGW のコンパイラなら gdb を使つてください (上記の |debug-gcc| 參照)。
vim.exe か gvim.exe を起動し、Visual Studio を起動してください。(Visual Studio を持つてゐない場合は、|get-ms-debuggers| の說明に從つて、無料の Visual C++ 2005 Express Edition を入手してください。)
メニューから「ツール/プロセスにアタッチ」を選擇し、Vim のプロセスを選擇します。
そして、Vim を操作してクラッシュを再現します。「ハンドルされてゐない例外が發生しました」といふ Visual Studio のダイアログが表示されるので、中斷ボタンをクリックしてプロセスを中斷してください。
シンボルが讀み込めず、ソースコードを表示できなかつたときは、もう 1 つダイアログが表示されます。OK をクリックしてください。
ウィンドウがいくつか開きます。呼び出し履歷ウィンドウの右クリックメニューから「シンボルの讀み込み」を選擇してください。シンボル檢索ダイアログが開くので、(g)vim.pdb のあるディレクトリを選擇してください。
このとき、呼び出し履歷ウィンドウには Vim の函數名や行番號が表示されてゐるはずです。どれかをダブルクリックするとソースの檢索ダイアログが表示されます。Vim のソースがあるディレクトリを選擇してください (もしソースがあるなら)。
さらに詳しくデバッグする方法が分からないときは、":help bug-reports
" の說明に從つてください。バグレポートに呼び出し履歷を貼り付けてください。
有料版の Visual Studio を使つてゐる場合は、デバッグメニューから minidump を保存できるので、それをバグレポートに添付してください。minidump は 100KB 以下の小さなファイルで、Vim のプロセスに關する情報が入つてゐます。
Visual C++ 2005 Express Edition では minidump を保存できません。just-in-time デバッガ (クラッシュを檢出して自動的に起動されるデバッガ) もインストールされません。それらが必要なときは WinDbg (|debug-windbg|) を使つてください。
WinDbg の入手方法は |get-ms-debuggers| を參照してください。
Visual Studio IDE を使ふのと同じやうに、WinDbg から Vim のプロセスにアタッチできます。プログラムがクラッシュしたときに、事後分析デバッガ (postmortem debugger) として、WinDebug を自動的に起動することができます。事後分析デバッガとして WinDeb を設定するには "windbg -I" を實行してください。
WinDbg から、實行中の Vim のプロセスにアタッチするには、WinDeb を起動し、File メニューから「プロセスにアタッチ」を選擇し、Vim のプロセスを選擇して OK をクリックします。
メニューから「File->Symbol File Path」を選擇し、Vim PDB の入つてゐるフォルダを symbolpath に追加してください。Vim のソースファイルもある場合は、File メニューの Source File Path を使つてください。WinDbg でソースファイルを開いたり、ブレークポイントを設定したりできます。Vim をクラッシュさせると、クラッシュした場所のソースファイルが WinDbg で開かれます。View メニューを使つて、コールスタック、ローカル變數、ウォッチウィンドウなどを見ることができます。
事後分析デバッガとして WinDbg を使つてゐる場合、WinDbg から Vim のプロセスにアタッチする必要はありません。Vim をクラッシュさせるだけで WinDbg が自動的に起動します。上述のやうに、シンボルファイルパスとソースファイルパスを設定してください。
minidump を保存するには、WinDbg コマンドラインで次のコマンドを入力します:
.dump vim.dmp
Visual Studio か WinDbg を使つて minidump を開くことができます。
Visual Studio 2005 の場合: メニューから「ファイル->開く->プロジェクト/ソリューション」選擇し、.dmp ファイルを開いてください。F5 キーを押してデバッガを起動します。Symbol File Path の設定について |debug-vs2005| の說明も參照してください。
WinDbg の場合: メニューから「File->Open Crash Dump」を選擇します。Symbol File Pathの設定について |debug-windbg| の說明も參照してください。
Windows 用のデバッグツールは次の場所からダウンロードできます
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
これには WinDbg デバッガが含まれてゐます。
Visual C++ 2005 Express Edition は次の場所からダウンロードできます。無料です。
http://msdn.microsoft.com/vstudio/express/visualC/default.aspx