48
|
1 *debug.txt* For Vim version 7.3. Last change: 2012 Feb 11
|
0
|
2
|
|
3
|
|
4 VIM REFERENCE MANUAL by Bram Moolenaar
|
|
5
|
|
6
|
|
7 Debugging Vim *debug-vim*
|
|
8
|
|
9 This is for debugging Vim itself, when it doesn't work properly.
|
|
10 For debugging Vim scripts, functions, etc. see |debug-scripts|
|
|
11
|
|
12 1. Location of a crash, using gcc and gdb |debug-gcc|
|
39
|
13 2. Locating memory leaks |debug-leaks|
|
|
14 3. Windows Bug Reporting |debug-win32|
|
0
|
15
|
|
16 ==============================================================================
|
|
17
|
48
|
18 1. Location of a crash, using gcc and gdb *debug-gcc* *gdb*
|
0
|
19
|
|
20 When Vim crashes in one of the test files, and you are using gcc for
|
|
21 compilation, here is what you can do to find out exactly where Vim crashes.
|
|
22 This also applies when using the MingW tools.
|
|
23
|
48
|
24 1. Compile Vim with the "-g" option (there is a line in the src/Makefile for
|
|
25 this, which you can uncomment). Also make sure "strip" is disabled (do not
|
39
|
26 install it, or use the line "STRIP = /bin/true").
|
0
|
27
|
|
28 2. Execute these commands (replace "11" with the test that fails): >
|
|
29 cd testdir
|
|
30 gdb ../vim
|
|
31 run -u unix.vim -U NONE -s dotest.in test11.in
|
|
32
|
|
33 3. Check where Vim crashes, gdb should give a message for this.
|
|
34
|
|
35 4. Get a stack trace from gdb with this command: >
|
|
36 where
|
|
37 < You can check out different places in the stack trace with: >
|
|
38 frame 3
|
|
39 < Replace "3" with one of the numbers in the stack trace.
|
|
40
|
|
41 ==============================================================================
|
|
42
|
39
|
43 2. Locating memory leaks *debug-leaks* *valgrind*
|
|
44
|
|
45 If you suspect Vim is leaking memory and you are using Linux, the valgrind
|
|
46 tool is very useful to pinpoint memory leaks.
|
|
47
|
|
48 First of all, build Vim with EXITFREE defined. Search for this in MAKEFILE
|
|
49 and uncomment the line.
|
|
50
|
|
51 Use this command to start Vim:
|
|
52 >
|
|
53 valgrind --log-file=valgrind.log --leak-check=full ./vim
|
|
54
|
|
55 Note: Vim will run much slower. If your .vimrc is big or you have several
|
|
56 plugins you need to be patient for startup, or run with the "-u NONE"
|
|
57 argument.
|
|
58
|
|
59 There are often a few leaks from libraries, such as getpwuid() and
|
|
60 XtVaAppCreateShell(). Those are unavoidable. The number of bytes should be
|
|
61 very small a Kbyte or less.
|
|
62
|
|
63 ==============================================================================
|
|
64
|
|
65 3. Windows Bug Reporting *debug-win32*
|
0
|
66
|
|
67 If the Windows version of Vim crashes in a reproducible manner, you can take
|
|
68 some steps to provide a useful bug report.
|
|
69
|
|
70
|
39
|
71 3.1 GENERIC ~
|
0
|
72
|
|
73 You must obtain the debugger symbols (PDB) file for your executable: gvim.pdb
|
|
74 for gvim.exe, or vim.pdb for vim.exe. The PDB should be available from the
|
|
75 same place that you obtained the executable. Be sure to use the PDB that
|
|
76 matches the EXE (same date).
|
|
77
|
|
78 If you built the executable yourself with the Microsoft Visual C++ compiler,
|
|
79 then the PDB was built with the EXE.
|
|
80
|
|
81 Alternatively, if you have the source files, you can import Make_ivc.mak into
|
|
82 Visual Studio as a workspace. Then select a debug configuration, build and
|
|
83 you can do all kinds of debugging (set breakpoints, watch variables, etc.).
|
|
84
|
|
85 If you have Visual Studio, use that instead of the VC Toolkit and WinDbg.
|
|
86
|
|
87 For other compilers, you should always use the corresponding debugger: TD for
|
|
88 a Vim executable compiled with the Borland compiler; gdb (see above
|
|
89 |debug-gcc|) for the Cygwin and MinGW compilers.
|
|
90
|
|
91
|
|
92 *debug-vs2005*
|
39
|
93 3.2 Debugging Vim crashes with Visual Studio 2005/Visual C++ 2005 Express ~
|
0
|
94
|
|
95 First launch vim.exe or gvim.exe and then launch Visual Studio. (If you don't
|
|
96 have Visual Studio, follow the instructions at |get-ms-debuggers| to obtain a
|
|
97 free copy of Visual C++ 2005 Express Edition.)
|
|
98
|
|
99 On the Tools menu, click Attach to Process. Choose the Vim process.
|
|
100
|
|
101 In Vim, reproduce the crash. A dialog will appear in Visual Studio, telling
|
|
102 you about the unhandled exception in the Vim process. Click Break to break
|
|
103 into the process.
|
|
104
|
|
105 Visual Studio will pop up another dialog, telling you that no symbols are
|
|
106 loaded and that the source code cannot be displayed. Click OK.
|
|
107
|
|
108 Several windows will open. Right-click in the Call Stack window. Choose Load
|
|
109 Symbols. The Find Symbols dialog will open, looking for (g)vim.pdb. Navigate
|
|
110 to the directory where you have the PDB file and click Open.
|
|
111
|
|
112 At this point, you should have a full call stack with vim function names and
|
|
113 line numbers. Double-click one of the lines and the Find Source dialog will
|
|
114 appear. Navigate to the directory where the Vim source is (if you have it.)
|
|
115
|
|
116 If you don't know how to debug this any further, follow the instructions
|
|
117 at ":help bug-reports". Paste the call stack into the bug report.
|
|
118
|
|
119 If you have a non-free version of Visual Studio, you can save a minidump via
|
|
120 the Debug menu and send it with the bug report. A minidump is a small file
|
|
121 (<100KB), which contains information about the state of your process.
|
|
122 Visual C++ 2005 Express Edition cannot save minidumps and it cannot be
|
|
123 installed as a just-in-time debugger. Use WinDbg, |debug-windbg|, if you
|
|
124 need to save minidumps or you want a just-in-time (postmortem) debugger.
|
|
125
|
|
126 *debug-windbg*
|
39
|
127 3.3 Debugging Vim crashes with WinDbg ~
|
0
|
128
|
|
129 See |get-ms-debuggers| to obtain a copy of WinDbg.
|
|
130
|
|
131 As with the Visual Studio IDE, you can attach WinDbg to a running Vim process.
|
|
132 You can also have your system automatically invoke WinDbg as a postmortem
|
|
133 debugger. To set WinDbg as your postmortem debugger, run "windbg -I".
|
|
134
|
|
135 To attach WinDbg to a running Vim process, launch WinDbg. On the File menu,
|
|
136 choose Attach to a Process. Select the Vim process and click OK.
|
|
137
|
|
138 At this point, choose Symbol File Path on the File menu, and add the folder
|
|
139 containing your Vim PDB to the sympath. If you have Vim source available,
|
|
140 use Source File Path on the File menu. You can now open source files in WinDbg
|
|
141 and set breakpoints, if you like. Reproduce your crash. WinDbg should open the
|
|
142 source file at the point of the crash. Using the View menu, you can examine
|
|
143 the call stack, local variables, watch windows, and so on.
|
|
144
|
|
145 If WinDbg is your postmortem debugger, you do not need to attach WinDbg to
|
|
146 your Vim process. Simply reproduce the crash and WinDbg will launch
|
|
147 automatically. As above, set the Symbol File Path and the Source File Path.
|
|
148
|
|
149 To save a minidump, type the following at the WinDbg command line: >
|
|
150 .dump vim.dmp
|
|
151 <
|
|
152 *debug-minidump*
|
39
|
153 3.4 Opening a Minidump ~
|
0
|
154
|
|
155 If you have a minidump file, you can open it in Visual Studio or in WinDbg.
|
|
156
|
|
157 In Visual Studio 2005: on the File menu, choose Open, then Project/Solution.
|
|
158 Navigate to the .dmp file and open it. Now press F5 to invoke the debugger.
|
|
159 Follow the instructions in |debug-vs2005| to set the Symbol File Path.
|
|
160
|
|
161 In WinDbg: choose Open Crash Dump on the File menu. Follow the instructions in
|
|
162 |debug-windbg| to set the Symbol File Path.
|
|
163
|
|
164 *get-ms-debuggers*
|
39
|
165 3.5 Obtaining Microsoft Debugging Tools ~
|
0
|
166
|
|
167 The Debugging Tools for Windows (including WinDbg) can be downloaded from
|
|
168 http://www.microsoft.com/whdc/devtools/debugging/default.mspx
|
|
169 This includes the WinDbg debugger.
|
|
170
|
|
171 Visual C++ 2005 Express Edition can be downloaded for free from:
|
|
172 http://msdn.microsoft.com/vstudio/express/visualC/default.aspx
|
|
173
|
|
174 =========================================================================
|
|
175 vim:tw=78:ts=8:ft=help:norl:
|