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