Merge changes from emacs-23
[bpt/emacs.git] / etc / DEBUG
CommitLineData
a933dad1 1Debugging GNU Emacs
5b87ad55 2
114f9c96
GM
3Copyright (C) 1985, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
4 2008, 2009, 2010 Free Software Foundation, Inc.
5b87ad55 5See the end of the file for license conditions.
a933dad1 6
a933dad1 7
6259c2ec
GM
8[People who debug Emacs on Windows using Microsoft debuggers should
9read the Windows-specific section near the end of this document.]
437368fe 10
42a3c627 11** When you debug Emacs with GDB, you should start it in the directory
7483daa1
RS
12where the executable was made. That directory has a .gdbinit file
13that defines various "user-defined" commands for debugging Emacs.
a313dc7b
EZ
14(These commands are described below under "Examining Lisp object
15values" and "Debugging Emacs Redisplay problems".)
42a3c627 16
70d9a9cd
DK
17** When you are trying to analyze failed assertions, it will be
18essential to compile Emacs either completely without optimizations or
19at least (when using GCC) with the -fno-crossjumping option. Failure
20to do so may make the compiler recycle the same abort call for all
21assertions in a given function, rendering the stack backtrace useless
22for identifying the specific failed assertion.
23
42a3c627 24** It is a good idea to run Emacs under GDB (or some other suitable
437368fe
EZ
25debugger) *all the time*. Then, when Emacs crashes, you will be able
26to debug the live process, not just a core dump. (This is especially
27important on systems which don't support core files, and instead print
28just the registers and some stack addresses.)
29
42a3c627 30** If Emacs hangs, or seems to be stuck in some infinite loop, typing
437368fe
EZ
31"kill -TSTP PID", where PID is the Emacs process ID, will cause GDB to
32kick in, provided that you run under GDB.
33
34** Getting control to the debugger
a933dad1 35
3102e429 36`Fsignal' is a very useful place to put a breakpoint in.
a933dad1
DL
37All Lisp errors go through there.
38
3102e429 39It is useful, when debugging, to have a guaranteed way to return to
eb55f651 40the debugger at any time. When using X, this is easy: type C-z at the
3102e429
EZ
41window where Emacs is running under GDB, and it will stop Emacs just
42as it would stop any ordinary program. When Emacs is running in a
43terminal, things are not so easy.
44
45The src/.gdbinit file in the Emacs distribution arranges for SIGINT
46(C-g in Emacs) to be passed to Emacs and not give control back to GDB.
47On modern POSIX systems, you can override that with this command:
48
7718638c 49 handle SIGINT stop nopass
3102e429
EZ
50
51After this `handle' command, SIGINT will return control to GDB. If
6259c2ec 52you want the C-g to cause a QUIT within Emacs as well, omit the `nopass'.
3102e429
EZ
53
54A technique that can work when `handle SIGINT' does not is to store
55the code for some character into the variable stop_character. Thus,
a933dad1
DL
56
57 set stop_character = 29
58
59makes Control-] (decimal code 29) the stop character.
60Typing Control-] will cause immediate stop. You cannot
61use the set command until the inferior process has been started.
62Put a breakpoint early in `main', or suspend the Emacs,
63to get an opportunity to do the set command.
64
06b6baf6
NR
65When Emacs is running in a terminal, it is sometimes useful to use a separate
66terminal for the debug session. This can be done by starting Emacs as usual,
67then attaching to it from gdb with the `attach' command which is explained in
68the node "Attach" of the GDB manual.
8ef597fe 69
a933dad1
DL
70** Examining Lisp object values.
71
72When you have a live process to debug, and it has not encountered a
73fatal error, you can use the GDB command `pr'. First print the value
74in the ordinary way, with the `p' command. Then type `pr' with no
75arguments. This calls a subroutine which uses the Lisp printer.
76
1ce9f40a
KS
77You can also use `pp value' to print the emacs value directly.
78
11eced2f
KS
79To see the current value of a Lisp Variable, use `pv variable'.
80
81Note: It is not a good idea to try `pr', `pp', or `pv' if you know that Emacs
1ce9f40a
KS
82is in deep trouble: its stack smashed (e.g., if it encountered SIGSEGV
83due to stack overflow), or crucial data structures, such as `obarray',
437368fe
EZ
84corrupted, etc. In such cases, the Emacs subroutine called by `pr'
85might make more damage, like overwrite some data that is important for
86debugging the original problem.
87
3102e429
EZ
88Also, on some systems it is impossible to use `pr' if you stopped
89Emacs while it was inside `select'. This is in fact what happens if
90you stop Emacs while it is waiting. In such a situation, don't try to
91use `pr'. Instead, use `s' to step out of the system call. Then
92Emacs will be between instructions and capable of handling `pr'.
a933dad1 93
11eced2f
KS
94If you can't use `pr' command, for whatever reason, you can use the
95`xpr' command to print out the data type and value of the last data
96value, For example:
97
98 p it->object
99 xpr
100
101You may also analyze data values using lower-level commands. Use the
102`xtype' command to print out the data type of the last data value.
103Once you know the data type, use the command that corresponds to that
104type. Here are these commands:
a933dad1
DL
105
106 xint xptr xwindow xmarker xoverlay xmiscfree xintfwd xboolfwd xobjfwd
107 xbufobjfwd xkbobjfwd xbuflocal xbuffer xsymbol xstring xvector xframe
108 xwinconfig xcompiled xcons xcar xcdr xsubr xprocess xfloat xscrollbar
109
110Each one of them applies to a certain type or class of types.
111(Some of these types are not visible in Lisp, because they exist only
112internally.)
113
114Each x... command prints some information about the value, and
115produces a GDB value (subsequently available in $) through which you
116can get at the rest of the contents.
117
437368fe 118In general, most of the rest of the contents will be additional Lisp
a933dad1
DL
119objects which you can examine in turn with the x... commands.
120
437368fe
EZ
121Even with a live process, these x... commands are useful for
122examining the fields in a buffer, window, process, frame or marker.
123Here's an example using concepts explained in the node "Value History"
aa1f38cd
NR
124of the GDB manual to print values associated with the variable
125called frame. First, use these commands:
437368fe
EZ
126
127 cd src
128 gdb emacs
aa1f38cd 129 b set_frame_buffer_list
177c0ea7 130 r -q
437368fe 131
8ef597fe 132Then Emacs hits the breakpoint:
437368fe
EZ
133
134 (gdb) p frame
aa1f38cd 135 $1 = 139854428
11eced2f 136 (gdb) xpr
437368fe
EZ
137 Lisp_Vectorlike
138 PVEC_FRAME
aa1f38cd 139 $2 = (struct frame *) 0x8560258
11eced2f 140 "emacs@localhost"
437368fe
EZ
141 (gdb) p *$
142 $3 = {
aa1f38cd
NR
143 size = 1073742931,
144 next = 0x85dfe58,
145 name = 140615219,
437368fe
EZ
146 [...]
147 }
437368fe 148
11eced2f
KS
149Now we can use `pr' to print the frame parameters:
150
151 (gdb) pp $->param_alist
152 ((background-mode . light) (display-type . color) [...])
437368fe 153
437368fe
EZ
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
6d02b70b 181last 300 keystrokes. We can print this Lisp vector
437368fe
EZ
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 247
11eced2f
KS
248** Debugging Emacs Redisplay problems
249
250The src/.gdbinit file defines many useful commands for dumping redisplay
251related data structures in a terse and user-friendly format:
252
253 `ppt' prints value of PT, narrowing, and gap in current buffer.
254 `pit' dumps the current display iterator `it'.
255 `pwin' dumps the current window 'win'.
256 `prow' dumps the current glyph_row `row'.
257 `pg' dumps the current glyph `glyph'.
258 `pgi' dumps the next glyph.
259 `pgrow' dumps all glyphs in current glyph_row `row'.
260 `pcursor' dumps current output_cursor.
261
262The above commands also exist in a version with an `x' suffix which
263takes an object of the relevant type as argument.
264
6205d23a
NR
265** Following longjmp call.
266
267Recent versions of glibc (2.4+?) encrypt stored values for setjmp/longjmp which
268prevents GDB from being able to follow a longjmp call using `next'. To
269disable this protection you need to set the environment variable
270LD_POINTER_GUARD to 0.
271
c167547b
NR
272** Using GDB in Emacs
273
274Debugging with GDB in Emacs offers some advantages over the command line (See
275the GDB Graphical Interface node of the Emacs manual). There are also some
276features available just for debugging Emacs:
277
a313dc7b
EZ
2781) The command gud-pp is available on the tool bar (the `pp' icon) and
279 allows the user to print the s-expression of the variable at point,
280 in the GUD buffer.
c167547b
NR
281
2822) Pressing `p' on a component of a watch expression that is a lisp object
283 in the speedbar prints its s-expression in the GUD buffer.
284
2853) The STOP button on the tool bar is adjusted so that it sends SIGTSTP
286 instead of the usual SIGINT.
287
2884) The command gud-pv has the global binding 'C-x C-a C-v' and prints the
289 value of the lisp variable at point.
290
437368fe
EZ
291** Debugging what happens while preloading and dumping Emacs
292
293Type `gdb temacs' and start it with `r -batch -l loadup dump'.
294
295If temacs actually succeeds when running under GDB in this way, do not
296try to run the dumped Emacs, because it was dumped with the GDB
297breakpoints in it.
298
299** Debugging `temacs'
300
301Debugging `temacs' is useful when you want to establish whether a
302problem happens in an undumped Emacs. To run `temacs' under a
303debugger, type "gdb temacs", then start it with `r -batch -l loadup'.
304
305** If you encounter X protocol errors
306
a2ebb43f
RS
307The X server normally reports protocol errors asynchronously,
308so you find out about them long after the primitive which caused
309the error has returned.
310
311To get clear information about the cause of an error, try evaluating
312(x-synchronize t). That puts Emacs into synchronous mode, where each
313Xlib call checks for errors before it returns. This mode is much
314slower, but when you get an error, you will see exactly which call
315really caused the error.
437368fe 316
ec4054f0
EZ
317You can start Emacs in a synchronous mode by invoking it with the -xrm
318option, like this:
319
9031cdf2 320 emacs -xrm "emacs.synchronous: true"
ec4054f0
EZ
321
322Setting a breakpoint in the function `x_error_quitter' and looking at
323the backtrace when Emacs stops inside that function will show what
324code causes the X protocol errors.
325
1d3adc26
EZ
326Some bugs related to the X protocol disappear when Emacs runs in a
327synchronous mode. To track down those bugs, we suggest the following
328procedure:
329
330 - Run Emacs under a debugger and put a breakpoint inside the
331 primitive function which, when called from Lisp, triggers the X
332 protocol errors. For example, if the errors happen when you
333 delete a frame, put a breakpoint inside `Fdelete_frame'.
334
335 - When the breakpoint breaks, step through the code, looking for
336 calls to X functions (the ones whose names begin with "X" or
337 "Xt" or "Xm").
338
339 - Insert calls to `XSync' before and after each call to the X
340 functions, like this:
341
342 XSync (f->output_data.x->display_info->display, 0);
343
344 where `f' is the pointer to the `struct frame' of the selected
345 frame, normally available via XFRAME (selected_frame). (Most
346 functions which call X already have some variable that holds the
347 pointer to the frame, perhaps called `f' or `sf', so you shouldn't
348 need to compute it.)
349
350 If your debugger can call functions in the program being debugged,
351 you should be able to issue the calls to `XSync' without recompiling
352 Emacs. For example, with GDB, just type:
353
354 call XSync (f->output_data.x->display_info->display, 0)
355
356 before and immediately after the suspect X calls. If your
357 debugger does not support this, you will need to add these pairs
358 of calls in the source and rebuild Emacs.
359
360 Either way, systematically step through the code and issue these
361 calls until you find the first X function called by Emacs after
362 which a call to `XSync' winds up in the function
363 `x_error_quitter'. The first X function call for which this
364 happens is the one that generated the X protocol error.
365
366 - You should now look around this offending X call and try to figure
367 out what is wrong with it.
368
46def989
JD
369** If Emacs causes errors or memory leaks in your X server
370
371You can trace the traffic between Emacs and your X server with a tool
372like xmon, available at ftp://ftp.x.org/contrib/devel_tools/.
373
374Xmon can be used to see exactly what Emacs sends when X protocol errors
375happen. If Emacs causes the X server memory usage to increase you can
376use xmon to see what items Emacs creates in the server (windows,
377graphical contexts, pixmaps) and what items Emacs delete. If there
378are consistently more creations than deletions, the type of item
379and the activity you do when the items get created can give a hint where
380to start debugging.
381
437368fe
EZ
382** If the symptom of the bug is that Emacs fails to respond
383
384Don't assume Emacs is `hung'--it may instead be in an infinite loop.
385To find out which, make the problem happen under GDB and stop Emacs
386once it is not responding. (If Emacs is using X Windows directly, you
387can stop Emacs by typing C-z at the GDB job.) Then try stepping with
388`step'. If Emacs is hung, the `step' command won't return. If it is
389looping, `step' will return.
390
391If this shows Emacs is hung in a system call, stop it again and
392examine the arguments of the call. If you report the bug, it is very
393important to state exactly where in the source the system call is, and
394what the arguments are.
395
396If Emacs is in an infinite loop, try to determine where the loop
397starts and ends. The easiest way to do this is to use the GDB command
398`finish'. Each time you use it, Emacs resumes execution until it
399exits one stack frame. Keep typing `finish' until it doesn't
400return--that means the infinite loop is in the stack frame which you
401just tried to finish.
402
403Stop Emacs again, and use `finish' repeatedly again until you get back
404to that frame. Then use `next' to step through that frame. By
405stepping, you will see where the loop starts and ends. Also, examine
406the data being used in the loop and try to determine why the loop does
407not exit when it should.
408
409** If certain operations in Emacs are slower than they used to be, here
410is some advice for how to find out why.
411
412Stop Emacs repeatedly during the slow operation, and make a backtrace
413each time. Compare the backtraces looking for a pattern--a specific
414function that shows up more often than you'd expect.
415
416If you don't see a pattern in the C backtraces, get some Lisp
417backtrace information by typing "xbacktrace" or by looking at Ffuncall
418frames (see above), and again look for a pattern.
419
420When using X, you can stop Emacs at any time by typing C-z at GDB.
421When not using X, you can do this with C-g. On non-Unix platforms,
422such as MS-DOS, you might need to press C-BREAK instead.
423
a933dad1
DL
424** If GDB does not run and your debuggers can't load Emacs.
425
426On some systems, no debugger can load Emacs with a symbol table,
427perhaps because they all have fixed limits on the number of symbols
428and Emacs exceeds the limits. Here is a method that can be used
429in such an extremity. Do
430
431 nm -n temacs > nmout
432 strip temacs
433 adb temacs
434 0xd:i
435 0xe:i
436 14:i
437 17:i
438 :r -l loadup (or whatever)
439
440It is necessary to refer to the file `nmout' to convert
441numeric addresses into symbols and vice versa.
442
443It is useful to be running under a window system.
6259c2ec
GM
444Then, if Emacs becomes hopelessly wedged, you can create another
445window to do kill -9 in. kill -ILL is often useful too, since that
446may make Emacs dump core or return to adb.
a933dad1
DL
447
448
449** Debugging incorrect screen updating.
450
451To debug Emacs problems that update the screen wrong, it is useful
452to have a record of what input you typed and what Emacs sent to the
453screen. To make these records, do
454
455(open-dribble-file "~/.dribble")
456(open-termscript "~/.termscript")
457
458The dribble file contains all characters read by Emacs from the
459terminal, and the termscript file contains all characters it sent to
460the terminal. The use of the directory `~/' prevents interference
461with any other user.
462
463If you have irreproducible display problems, put those two expressions
464in your ~/.emacs file. When the problem happens, exit the Emacs that
465you were running, kill it, and rename the two files. Then you can start
466another Emacs without clobbering those files, and use it to examine them.
125f929e
MB
467
468An easy way to see if too much text is being redrawn on a terminal is to
469evaluate `(setq inverse-video t)' before you try the operation you think
470will cause too much redrawing. This doesn't refresh the screen, so only
471newly drawn text is in inverse video.
437368fe 472
3f715e77
EZ
473The Emacs display code includes special debugging code, but it is
474normally disabled. You can enable it by building Emacs with the
475pre-processing symbol GLYPH_DEBUG defined. Here's one easy way,
476suitable for Unix and GNU systems, to build such a debugging version:
477
478 MYCPPFLAGS='-DGLYPH_DEBUG=1' make
479
480Building Emacs like that activates many assertions which scrutinize
481display code operation more than Emacs does normally. (To see the
482code which tests these assertions, look for calls to the `xassert'
6259c2ec 483macros.) Any assertion that is reported to fail should be investigated.
3f715e77
EZ
484
485Building with GLYPH_DEBUG defined also defines several helper
486functions which can help debugging display code. One such function is
487`dump_glyph_matrix'. If you run Emacs under GDB, you can print the
488contents of any glyph matrix by just calling that function with the
489matrix as its argument. For example, the following command will print
6259c2ec 490the contents of the current matrix of the window whose pointer is in `w':
3f715e77
EZ
491
492 (gdb) p dump_glyph_matrix (w->current_matrix, 2)
493
494(The second argument 2 tells dump_glyph_matrix to print the glyphs in
495a long form.) You can dump the selected window's current glyph matrix
496interactively with "M-x dump-glyph-matrix RET"; see the documentation
497of this function for more details.
498
499Several more functions for debugging display code are available in
71d6b459
EZ
500Emacs compiled with GLYPH_DEBUG defined; type "C-h f dump- TAB" and
501"C-h f trace- TAB" to see the full list.
3f715e77 502
1ce9f40a
KS
503When you debug display problems running emacs under X, you can use
504the `ff' command to flush all pending display updates to the screen.
505
437368fe
EZ
506
507** Debugging LessTif
508
509If you encounter bugs whereby Emacs built with LessTif grabs all mouse
510and keyboard events, or LessTif menus behave weirdly, it might be
511helpful to set the `DEBUGSOURCES' and `DEBUG_FILE' environment
512variables, so that one can see what LessTif was doing at this point.
513For instance
177c0ea7 514
6806e867 515 export DEBUGSOURCES="RowColumn.c:MenuShell.c:MenuUtil.c"
437368fe 516 export DEBUG_FILE=/usr/tmp/LESSTIF_TRACE
2aa25884 517 emacs &
437368fe
EZ
518
519causes LessTif to print traces from the three named source files to a
2aa25884
EZ
520file in `/usr/tmp' (that file can get pretty large). The above should
521be typed at the shell prompt before invoking Emacs, as shown by the
522last line above.
437368fe
EZ
523
524Running GDB from another terminal could also help with such problems.
525You can arrange for GDB to run on one machine, with the Emacs display
526appearing on another. Then, when the bug happens, you can go back to
527the machine where you started GDB and use the debugger from there.
528
529
437368fe
EZ
530** Debugging problems which happen in GC
531
f46cc673
EZ
532The array `last_marked' (defined on alloc.c) can be used to display up
533to 500 last objects marked by the garbage collection process.
62578de5 534Whenever the garbage collector marks a Lisp object, it records the
1a527e27
EZ
535pointer to that object in the `last_marked' array, which is maintained
536as a circular buffer. The variable `last_marked_index' holds the
537index into the `last_marked' array one place beyond where the pointer
538to the very last marked object is stored.
437368fe
EZ
539
540The single most important goal in debugging GC problems is to find the
541Lisp data structure that got corrupted. This is not easy since GC
542changes the tag bits and relocates strings which make it hard to look
543at Lisp objects with commands such as `pr'. It is sometimes necessary
544to convert Lisp_Object variables into pointers to C struct's manually.
437368fe 545
1a527e27
EZ
546Use the `last_marked' array and the source to reconstruct the sequence
547that objects were marked. In general, you need to correlate the
548values recorded in the `last_marked' array with the corresponding
549stack frames in the backtrace, beginning with the innermost frame.
550Some subroutines of `mark_object' are invoked recursively, others loop
551over portions of the data structure and mark them as they go. By
552looking at the code of those routines and comparing the frames in the
553backtrace with the values in `last_marked', you will be able to find
554connections between the values in `last_marked'. E.g., when GC finds
555a cons cell, it recursively marks its car and its cdr. Similar things
556happen with properties of symbols, elements of vectors, etc. Use
557these connections to reconstruct the data structure that was being
558marked, paying special attention to the strings and names of symbols
559that you encounter: these strings and symbol names can be used to grep
560the sources to find out what high-level symbols and global variables
561are involved in the crash.
562
563Once you discover the corrupted Lisp object or data structure, grep
564the sources for its uses and try to figure out what could cause the
2fbcf174 565corruption. If looking at the sources doesn't help, you could try
1a527e27
EZ
566setting a watchpoint on the corrupted data, and see what code modifies
567it in some invalid way. (Obviously, this technique is only useful for
568data that is modified only very rarely.)
569
570It is also useful to look at the corrupted object or data structure in
571a fresh Emacs session and compare its contents with a session that you
572are debugging.
437368fe 573
93699019
EZ
574** Debugging problems with non-ASCII characters
575
576If you experience problems which seem to be related to non-ASCII
577characters, such as \201 characters appearing in the buffer or in your
578files, set the variable byte-debug-flag to t. This causes Emacs to do
579some extra checks, such as look for broken relations between byte and
580character positions in buffers and strings; the resulting diagnostics
581might pinpoint the cause of the problem.
582
036cb5a2
EZ
583** Debugging the TTY (non-windowed) version
584
585The most convenient method of debugging the character-terminal display
586is to do that on a window system such as X. Begin by starting an
587xterm window, then type these commands inside that window:
588
589 $ tty
590 $ echo $TERM
591
592Let's say these commands print "/dev/ttyp4" and "xterm", respectively.
593
594Now start Emacs (the normal, windowed-display session, i.e. without
595the `-nw' option), and invoke "M-x gdb RET emacs RET" from there. Now
596type these commands at GDB's prompt:
597
598 (gdb) set args -nw -t /dev/ttyp4
599 (gdb) set environment TERM xterm
600 (gdb) run
601
602The debugged Emacs should now start in no-window mode with its display
603directed to the xterm window you opened above.
604
e039053d
EZ
605Similar arrangement is possible on a character terminal by using the
606`screen' package.
607
19cf8f36
EZ
608** Running Emacs built with malloc debugging packages
609
610If Emacs exhibits bugs that seem to be related to use of memory
611allocated off the heap, it might be useful to link Emacs with a
612special debugging library, such as Electric Fence (a.k.a. efence) or
613GNU Checker, which helps find such problems.
614
615Emacs compiled with such packages might not run without some hacking,
616because Emacs replaces the system's memory allocation functions with
617its own versions, and because the dumping process might be
618incompatible with the way these packages use to track allocated
6259c2ec 619memory. Here are some of the changes you might find necessary:
19cf8f36 620
6259c2ec 621 - Edit configure, to set system_malloc and CANNOT_DUMP to "yes".
19cf8f36
EZ
622
623 - Configure with a different --prefix= option. If you use GCC,
624 version 2.7.2 is preferred, as some malloc debugging packages
625 work a lot better with it than with 2.95 or later versions.
626
627 - Type "make" then "make -k install".
628
629 - If required, invoke the package-specific command to prepare
630 src/temacs for execution.
631
632 - cd ..; src/temacs
633
634(Note that this runs `temacs' instead of the usual `emacs' executable.
635This avoids problems with dumping Emacs mentioned above.)
636
637Some malloc debugging libraries might print lots of false alarms for
638bitfields used by Emacs in some data structures. If you want to get
639rid of the false alarms, you will have to hack the definitions of
640these data structures on the respective headers to remove the `:N'
641bitfield definitions (which will cause each such field to use a full
642int).
643
270bf00e
EZ
644** How to recover buffer contents from an Emacs core dump file
645
646The file etc/emacs-buffer.gdb defines a set of GDB commands for
647recovering the contents of Emacs buffers from a core dump file. You
648might also find those commands useful for displaying the list of
649buffers in human-readable format from within the debugger.
650
437368fe
EZ
651** Some suggestions for debugging on MS Windows:
652
653 (written by Marc Fleischeuers, Geoff Voelker and Andrew Innes)
654
3102e429 655To debug Emacs with Microsoft Visual C++, you either start emacs from
961e2394
EZ
656the debugger or attach the debugger to a running emacs process.
657
658To start emacs from the debugger, you can use the file bin/debug.bat.
659The Microsoft Developer studio will start and under Project, Settings,
3102e429 660Debug, General you can set the command-line arguments and Emacs's
437368fe
EZ
661startup directory. Set breakpoints (Edit, Breakpoints) at Fsignal and
662other functions that you want to examine. Run the program (Build,
663Start debug). Emacs will start and the debugger will take control as
664soon as a breakpoint is hit.
665
3102e429 666You can also attach the debugger to an already running Emacs process.
437368fe
EZ
667To do this, start up the Microsoft Developer studio and select Build,
668Start debug, Attach to process. Choose the Emacs process from the
669list. Send a break to the running process (Debug, Break) and you will
670find that execution is halted somewhere in user32.dll. Open the stack
671trace window and go up the stack to w32_msg_pump. Now you can set
672breakpoints in Emacs (Edit, Breakpoints). Continue the running Emacs
673process (Debug, Step out) and control will return to Emacs, until a
674breakpoint is hit.
675
3102e429 676To examine the contents of a Lisp variable, you can use the function
437368fe
EZ
677'debug_print'. Right-click on a variable, select QuickWatch (it has
678an eyeglass symbol on its button in the toolbar), and in the text
679field at the top of the window, place 'debug_print(' and ')' around
680the expression. Press 'Recalculate' and the output is sent to stderr,
681and to the debugger via the OutputDebugString routine. The output
682sent to stderr should be displayed in the console window that was
683opened when the emacs.exe executable was started. The output sent to
684the debugger should be displayed in the 'Debug' pane in the Output
685window. If Emacs was started from the debugger, a console window was
686opened at Emacs' startup; this console window also shows the output of
687'debug_print'.
688
689For example, start and run Emacs in the debugger until it is waiting
690for user input. Then click on the `Break' button in the debugger to
691halt execution. Emacs should halt in `ZwUserGetMessage' waiting for
692an input event. Use the `Call Stack' window to select the procedure
693`w32_msp_pump' up the call stack (see below for why you have to do
694this). Open the QuickWatch window and enter
695"debug_print(Vexec_path)". Evaluating this expression will then print
3102e429 696out the contents of the Lisp variable `exec-path'.
437368fe
EZ
697
698If QuickWatch reports that the symbol is unknown, then check the call
699stack in the `Call Stack' window. If the selected frame in the call
700stack is not an Emacs procedure, then the debugger won't recognize
701Emacs symbols. Instead, select a frame that is inside an Emacs
702procedure and try using `debug_print' again.
703
704If QuickWatch invokes debug_print but nothing happens, then check the
705thread that is selected in the debugger. If the selected thread is
706not the last thread to run (the "current" thread), then it cannot be
707used to execute debug_print. Use the Debug menu to select the current
708thread and try using debug_print again. Note that the debugger halts
709execution (e.g., due to a breakpoint) in the context of the current
710thread, so this should only be a problem if you've explicitly switched
711threads.
712
3102e429 713It is also possible to keep appropriately masked and typecast Lisp
437368fe
EZ
714symbols in the Watch window, this is more convenient when steeping
715though the code. For instance, on entering apply_lambda, you can
716watch (struct Lisp_Symbol *) (0xfffffff & args[0]).
961e2394
EZ
717
718Optimizations often confuse the MS debugger. For example, the
719debugger will sometimes report wrong line numbers, e.g., when it
720prints the backtrace for a crash. It is usually best to look at the
721disassembly to determine exactly what code is being run--the
722disassembly will probably show several source lines followed by a
723block of assembler for those lines. The actual point where Emacs
2fbcf174 724crashes will be one of those source lines, but not necessarily the one
961e2394
EZ
725that the debugger reports.
726
727Another problematic area with the MS debugger is with variables that
728are stored in registers: it will sometimes display wrong values for
729those variables. Usually you will not be able to see any value for a
730register variable, but if it is only being stored in a register
731temporarily, you will see an old value for it. Again, you need to
732look at the disassembly to determine which registers are being used,
733and look at those registers directly, to see the actual current values
734of these variables.
ab5796a9 735
bf69439f 736\f
5b87ad55
GM
737This file is part of GNU Emacs.
738
ab73e885 739GNU Emacs is free software: you can redistribute it and/or modify
5b87ad55 740it under the terms of the GNU General Public License as published by
ab73e885
GM
741the Free Software Foundation, either version 3 of the License, or
742(at your option) any later version.
5b87ad55
GM
743
744GNU Emacs is distributed in the hope that it will be useful,
745but WITHOUT ANY WARRANTY; without even the implied warranty of
746MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
747GNU General Public License for more details.
748
749You should have received a copy of the GNU General Public License
ab73e885 750along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
5b87ad55
GM
751
752\f
bf69439f
NR
753Local variables:
754mode: outline
755paragraph-separate: "[ \f]*$"
756end:
757
ab5796a9 758;;; arch-tag: fbf32980-e35d-481f-8e4c-a2eca2586e6b