| 
									
										
										
										
											2024-01-02 16:51:11 +01:00
										 |  |  | *debug.txt*     For Vim version 9.1.  Last change: 2019 May 07 | 
					
						
							| 
									
										
										
										
											2005-09-01 20:46:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		  VIM REFERENCE MANUAL    by Bram Moolenaar | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Debugging Vim						*debug-vim* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This is for debugging Vim itself, when it doesn't work properly. | 
					
						
							| 
									
										
										
										
											2005-12-17 22:06:52 +00:00
										 |  |  | For debugging Vim scripts, functions, etc. see |debug-scripts| | 
					
						
							| 
									
										
										
										
											2005-09-01 20:46:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 1. Location of a crash, using gcc and gdb	|debug-gcc| | 
					
						
							| 
									
										
										
										
											2010-01-06 20:52:26 +01:00
										 |  |  | 2. Locating memory leaks			|debug-leaks| | 
					
						
							|  |  |  | 3. Windows Bug Reporting			|debug-win32| | 
					
						
							| 
									
										
										
										
											2005-09-01 20:46:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ============================================================================== | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-02-13 00:05:22 +01:00
										 |  |  | 1. Location of a crash, using gcc and gdb		*debug-gcc* *gdb* | 
					
						
							| 
									
										
										
										
											2005-09-01 20:46:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | When Vim crashes in one of the test files, and you are using gcc for | 
					
						
							|  |  |  | compilation, here is what you can do to find out exactly where Vim crashes. | 
					
						
							|  |  |  | This also applies when using the MingW tools. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-08 16:06:37 +01:00
										 |  |  | 1. Compile Vim with the "-g" option (there is a line in the src/Makefile for | 
					
						
							|  |  |  |    this, which you can uncomment).  Also make sure "strip" is disabled (do not | 
					
						
							| 
									
										
										
										
											2010-09-19 19:01:21 +02:00
										 |  |  |    install it, or use the line "STRIP = /bin/true"). | 
					
						
							| 
									
										
										
										
											2005-09-01 20:46:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 2. Execute these commands (replace "11" with the test that fails): > | 
					
						
							|  |  |  | 	cd testdir | 
					
						
							|  |  |  | 	gdb ../vim | 
					
						
							|  |  |  | 	run -u unix.vim -U NONE -s dotest.in test11.in | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 3. Check where Vim crashes, gdb should give a message for this. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 4. Get a stack trace from gdb with this command: > | 
					
						
							|  |  |  | 	where | 
					
						
							|  |  |  | <  You can check out different places in the stack trace with: > | 
					
						
							|  |  |  | 	frame 3 | 
					
						
							|  |  |  | <  Replace "3" with one of the numbers in the stack trace. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ============================================================================== | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-14 13:58:07 +02:00
										 |  |  | 2. Locating memory leaks			*debug-leaks* *valgrind* | 
					
						
							| 
									
										
										
										
											2010-01-06 20:52:26 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | If you suspect Vim is leaking memory and you are using Linux, the valgrind | 
					
						
							|  |  |  | tool is very useful to pinpoint memory leaks. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | First of all, build Vim with EXITFREE defined.  Search for this in MAKEFILE | 
					
						
							|  |  |  | and uncomment the line. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-14 13:58:07 +02:00
										 |  |  | Use this command to start Vim: | 
					
						
							| 
									
										
										
										
											2010-01-06 20:52:26 +01:00
										 |  |  | > | 
					
						
							| 
									
										
										
										
											2010-07-14 13:58:07 +02:00
										 |  |  | 	valgrind --log-file=valgrind.log --leak-check=full ./vim | 
					
						
							| 
									
										
										
										
											2010-01-06 20:52:26 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | Note: Vim will run much slower.  If your .vimrc is big or you have several | 
					
						
							| 
									
										
										
										
											2017-07-15 19:39:43 +02:00
										 |  |  | plugins you need to be patient for startup, or run with the "--clean" | 
					
						
							| 
									
										
										
										
											2010-01-06 20:52:26 +01:00
										 |  |  | argument. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-14 13:58:07 +02:00
										 |  |  | There are often a few leaks from libraries, such as getpwuid() and | 
					
						
							|  |  |  | XtVaAppCreateShell().  Those are unavoidable.  The number of bytes should be | 
					
						
							|  |  |  | very small a Kbyte or less. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-06 20:52:26 +01:00
										 |  |  | ============================================================================== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 3. Windows Bug Reporting				*debug-win32* | 
					
						
							| 
									
										
										
										
											2005-09-01 20:46:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-24 19:47:27 +00:00
										 |  |  | If the Windows version of Vim crashes in a reproducible manner, you can take | 
					
						
							|  |  |  | some steps to provide a useful bug report. | 
					
						
							| 
									
										
										
										
											2005-09-01 20:46:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-24 19:47:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-19 19:01:21 +02:00
										 |  |  | 3.1 GENERIC ~ | 
					
						
							| 
									
										
										
										
											2006-04-24 19:47:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | You must obtain the debugger symbols (PDB) file for your executable: gvim.pdb | 
					
						
							| 
									
										
										
										
											2006-05-02 22:08:30 +00:00
										 |  |  | for gvim.exe, or vim.pdb for vim.exe. The PDB should be available from the | 
					
						
							|  |  |  | same place that you obtained the executable. Be sure to use the PDB that | 
					
						
							|  |  |  | matches the EXE (same date). | 
					
						
							| 
									
										
										
										
											2005-09-01 20:46:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | If you built the executable yourself with the Microsoft Visual C++ compiler, | 
					
						
							|  |  |  | then the PDB was built with the EXE. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-24 19:47:27 +00:00
										 |  |  | If you have Visual Studio, use that instead of the VC Toolkit and WinDbg. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-09 15:12:55 +02:00
										 |  |  | For other compilers, you should always use the corresponding debugger: gdb | 
					
						
							|  |  |  | (see above |debug-gcc|) for the Cygwin and MinGW compilers. | 
					
						
							| 
									
										
										
										
											2006-04-24 19:47:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-05-02 22:08:30 +00:00
										 |  |  | 								*debug-vs2005* | 
					
						
							| 
									
										
										
										
											2010-09-19 19:01:21 +02:00
										 |  |  | 3.2 Debugging Vim crashes with Visual Studio 2005/Visual C++ 2005 Express ~ | 
					
						
							| 
									
										
										
										
											2006-04-24 19:47:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | First launch vim.exe or gvim.exe and then launch Visual Studio.  (If you don't | 
					
						
							| 
									
										
										
										
											2006-05-02 22:08:30 +00:00
										 |  |  | have Visual Studio, follow the instructions at |get-ms-debuggers| to obtain a | 
					
						
							| 
									
										
										
										
											2006-04-24 19:47:27 +00:00
										 |  |  | free copy of Visual C++ 2005 Express Edition.) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | On the Tools menu, click Attach to Process.  Choose the Vim process. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | In Vim, reproduce the crash.  A dialog will appear in Visual Studio, telling | 
					
						
							|  |  |  | you about the unhandled exception in the Vim process.  Click Break to break | 
					
						
							|  |  |  | into the process. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Visual Studio will pop up another dialog, telling you that no symbols are | 
					
						
							|  |  |  | loaded and that the source code cannot be displayed.  Click OK. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Several windows will open.  Right-click in the Call Stack window.  Choose Load | 
					
						
							|  |  |  | Symbols.  The Find Symbols dialog will open, looking for (g)vim.pdb.  Navigate | 
					
						
							|  |  |  | to the directory where you have the PDB file and click Open. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | At this point, you should have a full call stack with vim function names and | 
					
						
							|  |  |  | line numbers.  Double-click one of the lines and the Find Source dialog will | 
					
						
							|  |  |  | appear.  Navigate to the directory where the Vim source is (if you have it.) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you don't know how to debug this any further, follow the instructions | 
					
						
							|  |  |  | at ":help bug-reports".  Paste the call stack into the bug report. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you have a non-free version of Visual Studio, you can save a minidump via | 
					
						
							|  |  |  | the Debug menu and send it with the bug report.  A minidump is a small file | 
					
						
							|  |  |  | (<100KB), which contains information about the state of your process. | 
					
						
							| 
									
										
										
										
											2006-05-02 22:08:30 +00:00
										 |  |  | Visual C++ 2005 Express Edition cannot save minidumps and it cannot be | 
					
						
							|  |  |  | installed as a just-in-time debugger. Use WinDbg, |debug-windbg|, if you | 
					
						
							|  |  |  | need to save minidumps or you want a just-in-time (postmortem) debugger. | 
					
						
							| 
									
										
										
										
											2006-04-24 19:47:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-05-02 22:08:30 +00:00
										 |  |  | 								*debug-windbg* | 
					
						
							| 
									
										
										
										
											2010-09-19 19:01:21 +02:00
										 |  |  | 3.3 Debugging Vim crashes with WinDbg ~ | 
					
						
							| 
									
										
										
										
											2006-04-24 19:47:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-05-02 22:08:30 +00:00
										 |  |  | See |get-ms-debuggers| to obtain a copy of WinDbg. | 
					
						
							| 
									
										
										
										
											2006-04-24 19:47:27 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-05-02 22:08:30 +00:00
										 |  |  | As with the Visual Studio IDE, you can attach WinDbg to a running Vim process. | 
					
						
							|  |  |  | You can also have your system automatically invoke WinDbg as a postmortem | 
					
						
							|  |  |  | debugger. To set WinDbg as your postmortem debugger, run "windbg -I". | 
					
						
							| 
									
										
										
										
											2005-09-01 20:46:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-05-02 22:08:30 +00:00
										 |  |  | To attach WinDbg to a running Vim process, launch WinDbg. On the File menu, | 
					
						
							|  |  |  | choose Attach to a Process. Select the Vim process and click OK. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | At this point, choose Symbol File Path on the File menu, and add the folder | 
					
						
							|  |  |  | containing your Vim PDB to the sympath. If you have Vim source available, | 
					
						
							|  |  |  | use Source File Path on the File menu. You can now open source files in WinDbg | 
					
						
							|  |  |  | and set breakpoints, if you like. Reproduce your crash. WinDbg should open the | 
					
						
							|  |  |  | source file at the point of the crash. Using the View menu, you can examine | 
					
						
							|  |  |  | the call stack, local variables, watch windows, and so on. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If WinDbg is your postmortem debugger, you do not need to attach WinDbg to | 
					
						
							|  |  |  | your Vim process. Simply reproduce the crash and WinDbg will launch | 
					
						
							|  |  |  | automatically. As above, set the Symbol File Path and the Source File Path. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | To save a minidump, type the following at the WinDbg command line: > | 
					
						
							|  |  |  |         .dump vim.dmp | 
					
						
							|  |  |  | < | 
					
						
							|  |  |  | 							*debug-minidump* | 
					
						
							| 
									
										
										
										
											2010-09-19 19:01:21 +02:00
										 |  |  | 3.4 Opening a Minidump ~ | 
					
						
							| 
									
										
										
										
											2006-05-02 22:08:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | If you have a minidump file, you can open it in Visual Studio or in WinDbg. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | In Visual Studio 2005: on the File menu, choose Open, then Project/Solution. | 
					
						
							|  |  |  | Navigate to the .dmp file and open it. Now press F5 to invoke the debugger. | 
					
						
							|  |  |  | Follow the instructions in |debug-vs2005| to set the Symbol File Path. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | In WinDbg: choose Open Crash Dump on the File menu. Follow the instructions in | 
					
						
							|  |  |  | |debug-windbg| to set the Symbol File Path. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							*get-ms-debuggers* | 
					
						
							| 
									
										
										
										
											2010-09-19 19:01:21 +02:00
										 |  |  | 3.5 Obtaining Microsoft Debugging Tools ~ | 
					
						
							| 
									
										
										
										
											2006-05-02 22:08:30 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The Debugging Tools for Windows (including WinDbg) can be downloaded from | 
					
						
							| 
									
										
										
										
											2005-09-01 20:46:49 +00:00
										 |  |  |     http://www.microsoft.com/whdc/devtools/debugging/default.mspx | 
					
						
							|  |  |  | This includes the WinDbg debugger. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-05-02 22:08:30 +00:00
										 |  |  | Visual C++ 2005 Express Edition can be downloaded for free from: | 
					
						
							|  |  |  |     http://msdn.microsoft.com/vstudio/express/visualC/default.aspx | 
					
						
							| 
									
										
										
										
											2005-09-01 20:46:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ========================================================================= | 
					
						
							| 
									
										
										
										
											2018-07-29 15:07:52 +02:00
										 |  |  |  vim:tw=78:ts=8:noet:ft=help:norl: |