(gud-speedbar-buttons): Follow change to gdb-var-list.
[bpt/emacs.git] / etc / DEBUG
CommitLineData
a933dad1 1Debugging GNU Emacs
bfd6d01a 2Copyright (C) 1985, 2000, 2001, 2002, 2003, 2004,
5b0d63bc 3 2005, 2006 Free Software Foundation, Inc.
a933dad1
DL
4
5 Permission is granted to anyone to make or distribute verbatim copies
6 of this document as received, in any medium, provided that the
7 copyright notice and permission notice are preserved,
8 and that the distributor grants the recipient permission
9 for further redistribution as permitted by this notice.
10
11 Permission is granted to distribute modified versions
12 of this document, or of portions of it,
13 under the above conditions, provided also that they
14 carry prominent notices stating who last changed them.
15
437368fe
EZ
16[People who debug Emacs on Windows using native Windows debuggers
17should read the Windows-specific section near the end of this
18document.]
19
42a3c627 20** When you debug Emacs with GDB, you should start it in the directory
7483daa1
RS
21where the executable was made. That directory has a .gdbinit file
22that defines various "user-defined" commands for debugging Emacs.
42a3c627 23
70d9a9cd
DK
24** When you are trying to analyze failed assertions, it will be
25essential to compile Emacs either completely without optimizations or
26at least (when using GCC) with the -fno-crossjumping option. Failure
27to do so may make the compiler recycle the same abort call for all
28assertions in a given function, rendering the stack backtrace useless
29for identifying the specific failed assertion.
30
42a3c627 31** It is a good idea to run Emacs under GDB (or some other suitable
437368fe
EZ
32debugger) *all the time*. Then, when Emacs crashes, you will be able
33to debug the live process, not just a core dump. (This is especially
34important on systems which don't support core files, and instead print
35just the registers and some stack addresses.)
36
42a3c627 37** If Emacs hangs, or seems to be stuck in some infinite loop, typing
437368fe
EZ
38"kill -TSTP PID", where PID is the Emacs process ID, will cause GDB to
39kick in, provided that you run under GDB.
40
41** Getting control to the debugger
a933dad1 42
3102e429 43`Fsignal' is a very useful place to put a breakpoint in.
a933dad1
DL
44All Lisp errors go through there.
45
3102e429 46It is useful, when debugging, to have a guaranteed way to return to
eb55f651 47the debugger at any time. When using X, this is easy: type C-z at the
3102e429
EZ
48window where Emacs is running under GDB, and it will stop Emacs just
49as it would stop any ordinary program. When Emacs is running in a
50terminal, things are not so easy.
51
52The src/.gdbinit file in the Emacs distribution arranges for SIGINT
53(C-g in Emacs) to be passed to Emacs and not give control back to GDB.
54On modern POSIX systems, you can override that with this command:
55
7718638c 56 handle SIGINT stop nopass
3102e429
EZ
57
58After this `handle' command, SIGINT will return control to GDB. If
59you want the C-g to cause a QUIT within Emacs as well, omit the
60`nopass'.
61
62A technique that can work when `handle SIGINT' does not is to store
63the code for some character into the variable stop_character. Thus,
a933dad1
DL
64
65 set stop_character = 29
66
67makes Control-] (decimal code 29) the stop character.
68Typing Control-] will cause immediate stop. You cannot
69use the set command until the inferior process has been started.
70Put a breakpoint early in `main', or suspend the Emacs,
71to get an opportunity to do the set command.
72
8ef597fe
NR
73When Emacs is running in a terminal, it is useful to use a separate terminal
74for the debug session. This can be done by starting Emacs as usual, then
75attaching to it from gdb with the `attach' command which is explained in the
76node "Attach" of the GDB manual.
77
a933dad1
DL
78** Examining Lisp object values.
79
80When you have a live process to debug, and it has not encountered a
81fatal error, you can use the GDB command `pr'. First print the value
82in the ordinary way, with the `p' command. Then type `pr' with no
83arguments. This calls a subroutine which uses the Lisp printer.
84
1ce9f40a
KS
85You can also use `pp value' to print the emacs value directly.
86
87Note: It is not a good idea to try `pr' or `pp' if you know that Emacs
88is in deep trouble: its stack smashed (e.g., if it encountered SIGSEGV
89due to stack overflow), or crucial data structures, such as `obarray',
437368fe
EZ
90corrupted, etc. In such cases, the Emacs subroutine called by `pr'
91might make more damage, like overwrite some data that is important for
92debugging the original problem.
93
3102e429
EZ
94Also, on some systems it is impossible to use `pr' if you stopped
95Emacs while it was inside `select'. This is in fact what happens if
96you stop Emacs while it is waiting. In such a situation, don't try to
97use `pr'. Instead, use `s' to step out of the system call. Then
98Emacs will be between instructions and capable of handling `pr'.
a933dad1 99
3102e429
EZ
100If you can't use `pr' command, for whatever reason, you can fall back
101on lower-level commands. Use the `xtype' command to print out the
102data type of the last data value. Once you know the data type, use
103the command that corresponds to that type. Here are these commands:
a933dad1
DL
104
105 xint xptr xwindow xmarker xoverlay xmiscfree xintfwd xboolfwd xobjfwd
106 xbufobjfwd xkbobjfwd xbuflocal xbuffer xsymbol xstring xvector xframe
107 xwinconfig xcompiled xcons xcar xcdr xsubr xprocess xfloat xscrollbar
108
109Each one of them applies to a certain type or class of types.
110(Some of these types are not visible in Lisp, because they exist only
111internally.)
112
113Each x... command prints some information about the value, and
114produces a GDB value (subsequently available in $) through which you
115can get at the rest of the contents.
116
437368fe 117In general, most of the rest of the contents will be additional Lisp
a933dad1
DL
118objects which you can examine in turn with the x... commands.
119
437368fe
EZ
120Even with a live process, these x... commands are useful for
121examining the fields in a buffer, window, process, frame or marker.
122Here's an example using concepts explained in the node "Value History"
aa1f38cd
NR
123of the GDB manual to print values associated with the variable
124called frame. First, use these commands:
437368fe
EZ
125
126 cd src
127 gdb emacs
aa1f38cd 128 b set_frame_buffer_list
177c0ea7 129 r -q
437368fe 130
8ef597fe 131Then Emacs hits the breakpoint:
437368fe
EZ
132
133 (gdb) p frame
aa1f38cd 134 $1 = 139854428
437368fe
EZ
135 (gdb) xtype
136 Lisp_Vectorlike
137 PVEC_FRAME
138 (gdb) xframe
aa1f38cd 139 $2 = (struct frame *) 0x8560258
437368fe
EZ
140 (gdb) p *$
141 $3 = {
aa1f38cd
NR
142 size = 1073742931,
143 next = 0x85dfe58,
144 name = 140615219,
437368fe
EZ
145 [...]
146 }
147 (gdb) p $3->name
aa1f38cd 148 $4 = 140615219
437368fe
EZ
149
150Now we can use `pr' to print the name of the frame:
151
152 (gdb) pr
153 "emacs@steenrod.math.nwu.edu"
154
155The Emacs C code heavily uses macros defined in lisp.h. So suppose
156we want the address of the l-value expression near the bottom of
157`add_command_key' from keyboard.c:
158
159 XVECTOR (this_command_keys)->contents[this_command_key_count++] = key;
160
f6e405a2
NR
161XVECTOR is a macro, so GDB only knows about it if Emacs has been compiled with
162preprocessor macro information. GCC provides this if you specify the options
163`-gdwarf-2' and `-g3'. In this case, GDB can evaluate expressions like
164"p XVECTOR (this_command_keys)".
437368fe 165
f6e405a2
NR
166When this information isn't available, you can use the xvector command in GDB
167to get the same result. Here is how:
437368fe
EZ
168
169 (gdb) p this_command_keys
170 $1 = 1078005760
171 (gdb) xvector
172 $2 = (struct Lisp_Vector *) 0x411000
173 0
174 (gdb) p $->contents[this_command_key_count]
175 $3 = 1077872640
176 (gdb) p &$
177 $4 = (int *) 0x411008
178
179Here's a related example of macros and the GDB `define' command.
180There are many Lisp vectors such as `recent_keys', which contains the
181last 100 keystrokes. We can print this Lisp vector
182
183p recent_keys
184pr
185
186But this may be inconvenient, since `recent_keys' is much more verbose
187than `C-h l'. We might want to print only the last 10 elements of
188this vector. `recent_keys' is updated in keyboard.c by the command
189
190 XVECTOR (recent_keys)->contents[recent_keys_index] = c;
191
192So we define a GDB command `xvector-elts', so the last 10 keystrokes
177c0ea7 193are printed by
437368fe
EZ
194
195 xvector-elts recent_keys recent_keys_index 10
196
197where you can define xvector-elts as follows:
198
199 define xvector-elts
200 set $i = 0
201 p $arg0
202 xvector
203 set $foo = $
204 while $i < $arg2
177c0ea7 205 p $foo->contents[$arg1-($i++)]
437368fe
EZ
206 pr
207 end
208 document xvector-elts
209 Prints a range of elements of a Lisp vector.
210 xvector-elts v n i
211 prints `i' elements of the vector `v' ending at the index `n'.
212 end
213
214** Getting Lisp-level backtrace information within GDB
215
3102e429
EZ
216The most convenient way is to use the `xbacktrace' command. This
217shows the names of the Lisp functions that are currently active.
437368fe
EZ
218
219If that doesn't work (e.g., because the `backtrace_list' structure is
220corrupted), type "bt" at the GDB prompt, to produce the C-level
221backtrace, and look for stack frames that call Ffuncall. Select them
222one by one in GDB, by typing "up N", where N is the appropriate number
223of frames to go up, and in each frame that calls Ffuncall type this:
224
225 p *args
226 pr
227
228This will print the name of the Lisp function called by that level
229of function calling.
230
231By printing the remaining elements of args, you can see the argument
232values. Here's how to print the first argument:
177c0ea7 233
437368fe
EZ
234 p args[1]
235 pr
236
237If you do not have a live process, you can use xtype and the other
238x... commands such as xsymbol to get such information, albeit less
239conveniently. For example:
240
241 p *args
242 xtype
243
244and, assuming that "xtype" says that args[0] is a symbol:
245
177c0ea7 246 xsymbol
437368fe
EZ
247
248** Debugging what happens while preloading and dumping Emacs
249
250Type `gdb temacs' and start it with `r -batch -l loadup dump'.
251
252If temacs actually succeeds when running under GDB in this way, do not
253try to run the dumped Emacs, because it was dumped with the GDB
254breakpoints in it.
255
256** Debugging `temacs'
257
258Debugging `temacs' is useful when you want to establish whether a
259problem happens in an undumped Emacs. To run `temacs' under a
260debugger, type "gdb temacs", then start it with `r -batch -l loadup'.
261
262** If you encounter X protocol errors
263
264Try evaluating (x-synchronize t). That puts Emacs into synchronous
265mode, where each Xlib call checks for errors before it returns. This
266mode is much slower, but when you get an error, you will see exactly
267which call really caused the error.
268
ec4054f0
EZ
269You can start Emacs in a synchronous mode by invoking it with the -xrm
270option, like this:
271
9031cdf2 272 emacs -xrm "emacs.synchronous: true"
ec4054f0
EZ
273
274Setting a breakpoint in the function `x_error_quitter' and looking at
275the backtrace when Emacs stops inside that function will show what
276code causes the X protocol errors.
277
1d3adc26
EZ
278Some bugs related to the X protocol disappear when Emacs runs in a
279synchronous mode. To track down those bugs, we suggest the following
280procedure:
281
282 - Run Emacs under a debugger and put a breakpoint inside the
283 primitive function which, when called from Lisp, triggers the X
284 protocol errors. For example, if the errors happen when you
285 delete a frame, put a breakpoint inside `Fdelete_frame'.
286
287 - When the breakpoint breaks, step through the code, looking for
288 calls to X functions (the ones whose names begin with "X" or
289 "Xt" or "Xm").
290
291 - Insert calls to `XSync' before and after each call to the X
292 functions, like this:
293
294 XSync (f->output_data.x->display_info->display, 0);
295
296 where `f' is the pointer to the `struct frame' of the selected
297 frame, normally available via XFRAME (selected_frame). (Most
298 functions which call X already have some variable that holds the
299 pointer to the frame, perhaps called `f' or `sf', so you shouldn't
300 need to compute it.)
301
302 If your debugger can call functions in the program being debugged,
303 you should be able to issue the calls to `XSync' without recompiling
304 Emacs. For example, with GDB, just type:
305
306 call XSync (f->output_data.x->display_info->display, 0)
307
308 before and immediately after the suspect X calls. If your
309 debugger does not support this, you will need to add these pairs
310 of calls in the source and rebuild Emacs.
311
312 Either way, systematically step through the code and issue these
313 calls until you find the first X function called by Emacs after
314 which a call to `XSync' winds up in the function
315 `x_error_quitter'. The first X function call for which this
316 happens is the one that generated the X protocol error.
317
318 - You should now look around this offending X call and try to figure
319 out what is wrong with it.
320
46def989
JD
321** If Emacs causes errors or memory leaks in your X server
322
323You can trace the traffic between Emacs and your X server with a tool
324like xmon, available at ftp://ftp.x.org/contrib/devel_tools/.
325
326Xmon can be used to see exactly what Emacs sends when X protocol errors
327happen. If Emacs causes the X server memory usage to increase you can
328use xmon to see what items Emacs creates in the server (windows,
329graphical contexts, pixmaps) and what items Emacs delete. If there
330are consistently more creations than deletions, the type of item
331and the activity you do when the items get created can give a hint where
332to start debugging.
333
437368fe
EZ
334** If the symptom of the bug is that Emacs fails to respond
335
336Don't assume Emacs is `hung'--it may instead be in an infinite loop.
337To find out which, make the problem happen under GDB and stop Emacs
338once it is not responding. (If Emacs is using X Windows directly, you
339can stop Emacs by typing C-z at the GDB job.) Then try stepping with
340`step'. If Emacs is hung, the `step' command won't return. If it is
341looping, `step' will return.
342
343If this shows Emacs is hung in a system call, stop it again and
344examine the arguments of the call. If you report the bug, it is very
345important to state exactly where in the source the system call is, and
346what the arguments are.
347
348If Emacs is in an infinite loop, try to determine where the loop
349starts and ends. The easiest way to do this is to use the GDB command
350`finish'. Each time you use it, Emacs resumes execution until it
351exits one stack frame. Keep typing `finish' until it doesn't
352return--that means the infinite loop is in the stack frame which you
353just tried to finish.
354
355Stop Emacs again, and use `finish' repeatedly again until you get back
356to that frame. Then use `next' to step through that frame. By
357stepping, you will see where the loop starts and ends. Also, examine
358the data being used in the loop and try to determine why the loop does
359not exit when it should.
360
361** If certain operations in Emacs are slower than they used to be, here
362is some advice for how to find out why.
363
364Stop Emacs repeatedly during the slow operation, and make a backtrace
365each time. Compare the backtraces looking for a pattern--a specific
366function that shows up more often than you'd expect.
367
368If you don't see a pattern in the C backtraces, get some Lisp
369backtrace information by typing "xbacktrace" or by looking at Ffuncall
370frames (see above), and again look for a pattern.
371
372When using X, you can stop Emacs at any time by typing C-z at GDB.
373When not using X, you can do this with C-g. On non-Unix platforms,
374such as MS-DOS, you might need to press C-BREAK instead.
375
a933dad1
DL
376** If GDB does not run and your debuggers can't load Emacs.
377
378On some systems, no debugger can load Emacs with a symbol table,
379perhaps because they all have fixed limits on the number of symbols
380and Emacs exceeds the limits. Here is a method that can be used
381in such an extremity. Do
382
383 nm -n temacs > nmout
384 strip temacs
385 adb temacs
386 0xd:i
387 0xe:i
388 14:i
389 17:i
390 :r -l loadup (or whatever)
391
392It is necessary to refer to the file `nmout' to convert
393numeric addresses into symbols and vice versa.
394
395It is useful to be running under a window system.
396Then, if Emacs becomes hopelessly wedged, you can create
397another window to do kill -9 in. kill -ILL is often
398useful too, since that may make Emacs dump core or return
399to adb.
400
401
402** Debugging incorrect screen updating.
403
404To debug Emacs problems that update the screen wrong, it is useful
405to have a record of what input you typed and what Emacs sent to the
406screen. To make these records, do
407
408(open-dribble-file "~/.dribble")
409(open-termscript "~/.termscript")
410
411The dribble file contains all characters read by Emacs from the
412terminal, and the termscript file contains all characters it sent to
413the terminal. The use of the directory `~/' prevents interference
414with any other user.
415
416If you have irreproducible display problems, put those two expressions
417in your ~/.emacs file. When the problem happens, exit the Emacs that
418you were running, kill it, and rename the two files. Then you can start
419another Emacs without clobbering those files, and use it to examine them.
125f929e
MB
420
421An easy way to see if too much text is being redrawn on a terminal is to
422evaluate `(setq inverse-video t)' before you try the operation you think
423will cause too much redrawing. This doesn't refresh the screen, so only
424newly drawn text is in inverse video.
437368fe 425
3f715e77
EZ
426The Emacs display code includes special debugging code, but it is
427normally disabled. You can enable it by building Emacs with the
428pre-processing symbol GLYPH_DEBUG defined. Here's one easy way,
429suitable for Unix and GNU systems, to build such a debugging version:
430
431 MYCPPFLAGS='-DGLYPH_DEBUG=1' make
432
433Building Emacs like that activates many assertions which scrutinize
434display code operation more than Emacs does normally. (To see the
435code which tests these assertions, look for calls to the `xassert'
436macros.) Any assertion that is reported to fail should be
437investigated.
438
439Building with GLYPH_DEBUG defined also defines several helper
440functions which can help debugging display code. One such function is
441`dump_glyph_matrix'. If you run Emacs under GDB, you can print the
442contents of any glyph matrix by just calling that function with the
443matrix as its argument. For example, the following command will print
444the contents of the current matrix of the window whose pointer is in
445`w':
446
447 (gdb) p dump_glyph_matrix (w->current_matrix, 2)
448
449(The second argument 2 tells dump_glyph_matrix to print the glyphs in
450a long form.) You can dump the selected window's current glyph matrix
451interactively with "M-x dump-glyph-matrix RET"; see the documentation
452of this function for more details.
453
454Several more functions for debugging display code are available in
71d6b459
EZ
455Emacs compiled with GLYPH_DEBUG defined; type "C-h f dump- TAB" and
456"C-h f trace- TAB" to see the full list.
3f715e77 457
1ce9f40a
KS
458When you debug display problems running emacs under X, you can use
459the `ff' command to flush all pending display updates to the screen.
460
437368fe
EZ
461
462** Debugging LessTif
463
464If you encounter bugs whereby Emacs built with LessTif grabs all mouse
465and keyboard events, or LessTif menus behave weirdly, it might be
466helpful to set the `DEBUGSOURCES' and `DEBUG_FILE' environment
467variables, so that one can see what LessTif was doing at this point.
468For instance
177c0ea7 469
6806e867 470 export DEBUGSOURCES="RowColumn.c:MenuShell.c:MenuUtil.c"
437368fe 471 export DEBUG_FILE=/usr/tmp/LESSTIF_TRACE
2aa25884 472 emacs &
437368fe
EZ
473
474causes LessTif to print traces from the three named source files to a
2aa25884
EZ
475file in `/usr/tmp' (that file can get pretty large). The above should
476be typed at the shell prompt before invoking Emacs, as shown by the
477last line above.
437368fe
EZ
478
479Running GDB from another terminal could also help with such problems.
480You can arrange for GDB to run on one machine, with the Emacs display
481appearing on another. Then, when the bug happens, you can go back to
482the machine where you started GDB and use the debugger from there.
483
484
437368fe
EZ
485** Debugging problems which happen in GC
486
f46cc673
EZ
487The array `last_marked' (defined on alloc.c) can be used to display up
488to 500 last objects marked by the garbage collection process.
62578de5
EZ
489Whenever the garbage collector marks a Lisp object, it records the
490pointer to that object in the `last_marked' array. The variable
f46cc673
EZ
491`last_marked_index' holds the index into the `last_marked' array one
492place beyond where the pointer to the very last marked object is
493stored.
437368fe
EZ
494
495The single most important goal in debugging GC problems is to find the
496Lisp data structure that got corrupted. This is not easy since GC
497changes the tag bits and relocates strings which make it hard to look
498at Lisp objects with commands such as `pr'. It is sometimes necessary
499to convert Lisp_Object variables into pointers to C struct's manually.
500Use the `last_marked' array and the source to reconstruct the sequence
501that objects were marked.
502
503Once you discover the corrupted Lisp object or data structure, it is
8e92a96a
EZ
504useful to look at it in a fresh Emacs session and compare its contents
505with a session that you are debugging.
437368fe 506
93699019
EZ
507** Debugging problems with non-ASCII characters
508
509If you experience problems which seem to be related to non-ASCII
510characters, such as \201 characters appearing in the buffer or in your
511files, set the variable byte-debug-flag to t. This causes Emacs to do
512some extra checks, such as look for broken relations between byte and
513character positions in buffers and strings; the resulting diagnostics
514might pinpoint the cause of the problem.
515
036cb5a2
EZ
516** Debugging the TTY (non-windowed) version
517
518The most convenient method of debugging the character-terminal display
519is to do that on a window system such as X. Begin by starting an
520xterm window, then type these commands inside that window:
521
522 $ tty
523 $ echo $TERM
524
525Let's say these commands print "/dev/ttyp4" and "xterm", respectively.
526
527Now start Emacs (the normal, windowed-display session, i.e. without
528the `-nw' option), and invoke "M-x gdb RET emacs RET" from there. Now
529type these commands at GDB's prompt:
530
531 (gdb) set args -nw -t /dev/ttyp4
532 (gdb) set environment TERM xterm
533 (gdb) run
534
535The debugged Emacs should now start in no-window mode with its display
536directed to the xterm window you opened above.
537
e039053d
EZ
538Similar arrangement is possible on a character terminal by using the
539`screen' package.
540
19cf8f36
EZ
541** Running Emacs built with malloc debugging packages
542
543If Emacs exhibits bugs that seem to be related to use of memory
544allocated off the heap, it might be useful to link Emacs with a
545special debugging library, such as Electric Fence (a.k.a. efence) or
546GNU Checker, which helps find such problems.
547
548Emacs compiled with such packages might not run without some hacking,
549because Emacs replaces the system's memory allocation functions with
550its own versions, and because the dumping process might be
551incompatible with the way these packages use to track allocated
552memory. Here are some of the changes you might find necessary
553(SYSTEM-NAME and MACHINE-NAME are the names of your OS- and
554CPU-specific headers in the subdirectories of `src'):
555
556 - In src/s/SYSTEM-NAME.h add "#define SYSTEM_MALLOC".
557
558 - In src/m/MACHINE-NAME.h add "#define CANNOT_DUMP" and
559 "#define CANNOT_UNEXEC".
560
561 - Configure with a different --prefix= option. If you use GCC,
562 version 2.7.2 is preferred, as some malloc debugging packages
563 work a lot better with it than with 2.95 or later versions.
564
565 - Type "make" then "make -k install".
566
567 - If required, invoke the package-specific command to prepare
568 src/temacs for execution.
569
570 - cd ..; src/temacs
571
572(Note that this runs `temacs' instead of the usual `emacs' executable.
573This avoids problems with dumping Emacs mentioned above.)
574
575Some malloc debugging libraries might print lots of false alarms for
576bitfields used by Emacs in some data structures. If you want to get
577rid of the false alarms, you will have to hack the definitions of
578these data structures on the respective headers to remove the `:N'
579bitfield definitions (which will cause each such field to use a full
580int).
581
270bf00e
EZ
582** How to recover buffer contents from an Emacs core dump file
583
584The file etc/emacs-buffer.gdb defines a set of GDB commands for
585recovering the contents of Emacs buffers from a core dump file. You
586might also find those commands useful for displaying the list of
587buffers in human-readable format from within the debugger.
588
437368fe
EZ
589** Some suggestions for debugging on MS Windows:
590
591 (written by Marc Fleischeuers, Geoff Voelker and Andrew Innes)
592
3102e429 593To debug Emacs with Microsoft Visual C++, you either start emacs from
961e2394
EZ
594the debugger or attach the debugger to a running emacs process.
595
596To start emacs from the debugger, you can use the file bin/debug.bat.
597The Microsoft Developer studio will start and under Project, Settings,
3102e429 598Debug, General you can set the command-line arguments and Emacs's
437368fe
EZ
599startup directory. Set breakpoints (Edit, Breakpoints) at Fsignal and
600other functions that you want to examine. Run the program (Build,
601Start debug). Emacs will start and the debugger will take control as
602soon as a breakpoint is hit.
603
3102e429 604You can also attach the debugger to an already running Emacs process.
437368fe
EZ
605To do this, start up the Microsoft Developer studio and select Build,
606Start debug, Attach to process. Choose the Emacs process from the
607list. Send a break to the running process (Debug, Break) and you will
608find that execution is halted somewhere in user32.dll. Open the stack
609trace window and go up the stack to w32_msg_pump. Now you can set
610breakpoints in Emacs (Edit, Breakpoints). Continue the running Emacs
611process (Debug, Step out) and control will return to Emacs, until a
612breakpoint is hit.
613
3102e429 614To examine the contents of a Lisp variable, you can use the function
437368fe
EZ
615'debug_print'. Right-click on a variable, select QuickWatch (it has
616an eyeglass symbol on its button in the toolbar), and in the text
617field at the top of the window, place 'debug_print(' and ')' around
618the expression. Press 'Recalculate' and the output is sent to stderr,
619and to the debugger via the OutputDebugString routine. The output
620sent to stderr should be displayed in the console window that was
621opened when the emacs.exe executable was started. The output sent to
622the debugger should be displayed in the 'Debug' pane in the Output
623window. If Emacs was started from the debugger, a console window was
624opened at Emacs' startup; this console window also shows the output of
625'debug_print'.
626
627For example, start and run Emacs in the debugger until it is waiting
628for user input. Then click on the `Break' button in the debugger to
629halt execution. Emacs should halt in `ZwUserGetMessage' waiting for
630an input event. Use the `Call Stack' window to select the procedure
631`w32_msp_pump' up the call stack (see below for why you have to do
632this). Open the QuickWatch window and enter
633"debug_print(Vexec_path)". Evaluating this expression will then print
3102e429 634out the contents of the Lisp variable `exec-path'.
437368fe
EZ
635
636If QuickWatch reports that the symbol is unknown, then check the call
637stack in the `Call Stack' window. If the selected frame in the call
638stack is not an Emacs procedure, then the debugger won't recognize
639Emacs symbols. Instead, select a frame that is inside an Emacs
640procedure and try using `debug_print' again.
641
642If QuickWatch invokes debug_print but nothing happens, then check the
643thread that is selected in the debugger. If the selected thread is
644not the last thread to run (the "current" thread), then it cannot be
645used to execute debug_print. Use the Debug menu to select the current
646thread and try using debug_print again. Note that the debugger halts
647execution (e.g., due to a breakpoint) in the context of the current
648thread, so this should only be a problem if you've explicitly switched
649threads.
650
3102e429 651It is also possible to keep appropriately masked and typecast Lisp
437368fe
EZ
652symbols in the Watch window, this is more convenient when steeping
653though the code. For instance, on entering apply_lambda, you can
654watch (struct Lisp_Symbol *) (0xfffffff & args[0]).
961e2394
EZ
655
656Optimizations often confuse the MS debugger. For example, the
657debugger will sometimes report wrong line numbers, e.g., when it
658prints the backtrace for a crash. It is usually best to look at the
659disassembly to determine exactly what code is being run--the
660disassembly will probably show several source lines followed by a
661block of assembler for those lines. The actual point where Emacs
662crashes will be one of those source lines, but not neccesarily the one
663that the debugger reports.
664
665Another problematic area with the MS debugger is with variables that
666are stored in registers: it will sometimes display wrong values for
667those variables. Usually you will not be able to see any value for a
668register variable, but if it is only being stored in a register
669temporarily, you will see an old value for it. Again, you need to
670look at the disassembly to determine which registers are being used,
671and look at those registers directly, to see the actual current values
672of these variables.
ab5796a9
MB
673
674;;; arch-tag: fbf32980-e35d-481f-8e4c-a2eca2586e6b