Mercurial > emacs
diff etc/DEBUG @ 71445:241a58942caf
Mention `pv variable' to print value of Lisp variables.
Mention `xpr' and fix example to use it. Add section describing
commands such as `pit' that are useful for debugging redisplay
related problems.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Fri, 23 Jun 2006 14:37:10 +0000 |
parents | aed02e3a8c0f |
children | 8c249825e7f3 |
line wrap: on
line diff
--- a/etc/DEBUG Fri Jun 23 14:37:00 2006 +0000 +++ b/etc/DEBUG Fri Jun 23 14:37:10 2006 +0000 @@ -84,7 +84,9 @@ You can also use `pp value' to print the emacs value directly. -Note: It is not a good idea to try `pr' or `pp' if you know that Emacs +To see the current value of a Lisp Variable, use `pv variable'. + +Note: It is not a good idea to try `pr', `pp', or `pv' if you know that Emacs is in deep trouble: its stack smashed (e.g., if it encountered SIGSEGV due to stack overflow), or crucial data structures, such as `obarray', corrupted, etc. In such cases, the Emacs subroutine called by `pr' @@ -97,10 +99,17 @@ use `pr'. Instead, use `s' to step out of the system call. Then Emacs will be between instructions and capable of handling `pr'. -If you can't use `pr' command, for whatever reason, you can fall back -on lower-level commands. Use the `xtype' command to print out the -data type of the last data value. Once you know the data type, use -the command that corresponds to that type. Here are these commands: +If you can't use `pr' command, for whatever reason, you can use the +`xpr' command to print out the data type and value of the last data +value, For example: + + p it->object + xpr + +You may also analyze data values using lower-level commands. Use the +`xtype' command to print out the data type of the last data value. +Once you know the data type, use the command that corresponds to that +type. Here are these commands: xint xptr xwindow xmarker xoverlay xmiscfree xintfwd xboolfwd xobjfwd xbufobjfwd xkbobjfwd xbuflocal xbuffer xsymbol xstring xvector xframe @@ -132,11 +141,11 @@ (gdb) p frame $1 = 139854428 - (gdb) xtype + (gdb) xpr Lisp_Vectorlike PVEC_FRAME - (gdb) xframe $2 = (struct frame *) 0x8560258 + "emacs@localhost" (gdb) p *$ $3 = { size = 1073742931, @@ -144,13 +153,12 @@ name = 140615219, [...] } - (gdb) p $3->name - $4 = 140615219 + +Now we can use `pr' to print the frame parameters: -Now we can use `pr' to print the name of the frame: + (gdb) pp $->param_alist + ((background-mode . light) (display-type . color) [...]) - (gdb) pr - "emacs@steenrod.math.nwu.edu" The Emacs C code heavily uses macros defined in lisp.h. So suppose we want the address of the l-value expression near the bottom of @@ -245,6 +253,23 @@ xsymbol +** Debugging Emacs Redisplay problems + +The src/.gdbinit file defines many useful commands for dumping redisplay +related data structures in a terse and user-friendly format: + + `ppt' prints value of PT, narrowing, and gap in current buffer. + `pit' dumps the current display iterator `it'. + `pwin' dumps the current window 'win'. + `prow' dumps the current glyph_row `row'. + `pg' dumps the current glyph `glyph'. + `pgi' dumps the next glyph. + `pgrow' dumps all glyphs in current glyph_row `row'. + `pcursor' dumps current output_cursor. + +The above commands also exist in a version with an `x' suffix which +takes an object of the relevant type as argument. + ** Using GDB in Emacs Debugging with GDB in Emacs offers some advantages over the command line (See