diff options
| author | Karoly Lorentey | 2006-03-22 15:16:06 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2006-03-22 15:16:06 +0000 |
| commit | d4717700cc0b7af6197c19e22bd912e3b1ed67ee (patch) | |
| tree | 4e2a630584b23f670aff57a512a8f2d8182e39c4 /etc/DEBUG | |
| parent | f1be5774242454844bf21fbf32e0f6541e2add34 (diff) | |
| parent | d63cd76657e12b92a5d7736a15bc9b97a7f9990e (diff) | |
| download | emacs-d4717700cc0b7af6197c19e22bd912e3b1ed67ee.tar.gz emacs-d4717700cc0b7af6197c19e22bd912e3b1ed67ee.zip | |
Merged from emacs@sv.gnu.org
Patches applied:
* emacs@sv.gnu.org/emacs--devo--0--patch-160
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-161
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-162
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-163
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-164
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-165
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-166
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-167
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-168
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-169
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-170
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-171
Update from CVS: man/mh-e.texi (Folders): Various edits.
* emacs@sv.gnu.org/emacs--devo--0--patch-172
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-58
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-59
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-60
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-61
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-62
Merge from emacs--devo--0
* emacs@sv.gnu.org/gnus--rel--5.10--patch-63
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-64
Update from CVS
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-534
Diffstat (limited to 'etc/DEBUG')
| -rw-r--r-- | etc/DEBUG | 40 |
1 files changed, 31 insertions, 9 deletions
| @@ -506,22 +506,44 @@ the machine where you started GDB and use the debugger from there. | |||
| 506 | The array `last_marked' (defined on alloc.c) can be used to display up | 506 | The array `last_marked' (defined on alloc.c) can be used to display up |
| 507 | to 500 last objects marked by the garbage collection process. | 507 | to 500 last objects marked by the garbage collection process. |
| 508 | Whenever the garbage collector marks a Lisp object, it records the | 508 | Whenever the garbage collector marks a Lisp object, it records the |
| 509 | pointer to that object in the `last_marked' array. The variable | 509 | pointer to that object in the `last_marked' array, which is maintained |
| 510 | `last_marked_index' holds the index into the `last_marked' array one | 510 | as a circular buffer. The variable `last_marked_index' holds the |
| 511 | place beyond where the pointer to the very last marked object is | 511 | index into the `last_marked' array one place beyond where the pointer |
| 512 | stored. | 512 | to the very last marked object is stored. |
| 513 | 513 | ||
| 514 | The single most important goal in debugging GC problems is to find the | 514 | The single most important goal in debugging GC problems is to find the |
| 515 | Lisp data structure that got corrupted. This is not easy since GC | 515 | Lisp data structure that got corrupted. This is not easy since GC |
| 516 | changes the tag bits and relocates strings which make it hard to look | 516 | changes the tag bits and relocates strings which make it hard to look |
| 517 | at Lisp objects with commands such as `pr'. It is sometimes necessary | 517 | at Lisp objects with commands such as `pr'. It is sometimes necessary |
| 518 | to convert Lisp_Object variables into pointers to C struct's manually. | 518 | to convert Lisp_Object variables into pointers to C struct's manually. |
| 519 | Use the `last_marked' array and the source to reconstruct the sequence | ||
| 520 | that objects were marked. | ||
| 521 | 519 | ||
| 522 | Once you discover the corrupted Lisp object or data structure, it is | 520 | Use the `last_marked' array and the source to reconstruct the sequence |
| 523 | useful to look at it in a fresh Emacs session and compare its contents | 521 | that objects were marked. In general, you need to correlate the |
| 524 | with a session that you are debugging. | 522 | values recorded in the `last_marked' array with the corresponding |
| 523 | stack frames in the backtrace, beginning with the innermost frame. | ||
| 524 | Some subroutines of `mark_object' are invoked recursively, others loop | ||
| 525 | over portions of the data structure and mark them as they go. By | ||
| 526 | looking at the code of those routines and comparing the frames in the | ||
| 527 | backtrace with the values in `last_marked', you will be able to find | ||
| 528 | connections between the values in `last_marked'. E.g., when GC finds | ||
| 529 | a cons cell, it recursively marks its car and its cdr. Similar things | ||
| 530 | happen with properties of symbols, elements of vectors, etc. Use | ||
| 531 | these connections to reconstruct the data structure that was being | ||
| 532 | marked, paying special attention to the strings and names of symbols | ||
| 533 | that you encounter: these strings and symbol names can be used to grep | ||
| 534 | the sources to find out what high-level symbols and global variables | ||
| 535 | are involved in the crash. | ||
| 536 | |||
| 537 | Once you discover the corrupted Lisp object or data structure, grep | ||
| 538 | the sources for its uses and try to figure out what could cause the | ||
| 539 | corruption. If looking at the sources doesn;t help, you could try | ||
| 540 | setting a watchpoint on the corrupted data, and see what code modifies | ||
| 541 | it in some invalid way. (Obviously, this technique is only useful for | ||
| 542 | data that is modified only very rarely.) | ||
| 543 | |||
| 544 | It is also useful to look at the corrupted object or data structure in | ||
| 545 | a fresh Emacs session and compare its contents with a session that you | ||
| 546 | are debugging. | ||
| 525 | 547 | ||
| 526 | ** Debugging problems with non-ASCII characters | 548 | ** Debugging problems with non-ASCII characters |
| 527 | 549 | ||