annotate etc/DEBUG @ 32752:923b8d6d8277

Initial check-in: changes for building Emacs under Mac OS. 2000-10-23 Andrew Choi <akochoi@i-cable.com> * dispextern.h [macintosh]: Include macgui.h instead of macterm.h. * dispnew.c [macintosh]: Include macterm.h. (init_display) [macintosh]: initialization for window system. * emacs.c (main) [macintosh]: Call syms_of_textprop, syms_of_macfns, syms_of_ccl, syms_of_fontset, syms_of_xterm, syms_of_search, x_term_init, and init_keyboard before calling init_window_once. Also, call syms_of_xmenu. * fontset.c (syms_of_fontset) [macintosh]: Set ASCII font of default fontset to Monaco. * frame.c [macintosh]: Include macterm.h. Remove declarations of NewMacWindow and DisposeMacWindow. (make_terminal_frame) [macintosh]: Call make_mac_terminal_frame instead of calling NewMacWindow and setting fields of f->output_data.mac directly. Call init_frame_faces. (Fdelete_frame) [macintosh]: Remove unused code. (Fmodify_frame_parameters) [macintosh]: Call x_set_frame_parameters instead of mac_set_frame_parameters. * frame.h [macintosh]: Define menu_bar_lines field in struct frame. Define FRAME_EXTERNAL_MENU_BAR macro. * keyboard.c [macintosh]: Include macterm.h. (kbd_buffer_get_event) [macintosh]: Generate delete_window_event and menu_bar_activate_event type events as for X and NT. (make_lispy_event) [macintosh]: Construct lisp events of type MENU_BAR_EVENT as for X and NT. * sysdep.c [macintosh]: Remove declaration for sys_signal. Include stdlib.h. Remove definition of Vx_bitmap_file_path. (sys_subshell) [macintosh]: Remove definition entirely. (init_sys_modes) [macintosh]: Do not initialize Vwindow_system and Vwindow_system_version here. Remove initialization of Vx_bitmap_file_path. (read_input_waiting): Correct the number of parameters passed to read_socket_hook. Move all Macintosh functions to mac/mac.c. * term.c [macintosh]: Include macterm.h. * window.c [macintosh]: Include macterm.h. * xdisp.c [macintosh]: Include macterm.h. Declare set_frame_menubar and pending_menu_activation. (echo_area_display) [macintosh]: Do not return if terminal frame is the selected frame. (update_menu_bar) [macintosh]: Check FRAME_EXTERNAL_MENU_BAR (f). Allow only the selected frame to set menu bar. (redisplay_window) [macintosh]: Obtain menu bar to redisplay by calling FRAME_EXTERNAL_MENU_BAR (f). (display_menu_bar) [macintosh]: Check FRAME_MAC_P (f). * xfaces.c [macintosh]: Include macterm.h. Define x_display_info and check_x. Declare XCreateGC. Define x_create_gc and x_free_gc. Initialize font_sort_order. (x_face_list_fonts) [macintosh]: Use the same code as WINDOWSNT, but call x_list_fonts instead of w32_list_fonts. (Finternal_face_x_get_resource) [macintosh]: Do not call display_x_get_resource. (prepare_face_for_display) [macintosh]: Set xgcv.font. (realize_x_face) [macintosh]: Load the font if it is specified in ATTRS. (syms_of_xfaces) [macintosh]: Initialize Vscalable_fonts_allowed to Qt. * cus-edit.el (custom-button-face): Use 3D look for mac. (custom-button-pressed-face): Likewise. * faces.el (set-face-attributes-from-resources): Handle mac frames in the same way as x and w32 frames. (face-valid-attribute-values): Likewise. (read-face-attribute): Likewise. (defined-colors): Likewise. (color-defined-p): Likewise. (color-values): Likewise. (display-grayscale-p): Likewise. (face-set-after-frame-default): Likewise. (mode-line): Same default face as for x and w32. (tool-bar): Likewise. * frame.el: Remove call to frame-notice-user-settings at end of the file. * info.el (Info-fontify-node): make underlines invisible for mac as for x, pc, and w32 frame types. * term/mac-win.el: New file.
author Andrew Choi <akochoi@shaw.ca>
date Sun, 22 Oct 2000 16:50:16 +0000
parents 4881cd839f12
children 9b989029cccf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25853
Dave Love <fx@gnu.org>
parents:
diff changeset
1 Debugging GNU Emacs
32523
4881cd839f12 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 25853
diff changeset
2 Copyright (c) 1985, 2000 Free Software Foundation, Inc.
25853
Dave Love <fx@gnu.org>
parents:
diff changeset
3
Dave Love <fx@gnu.org>
parents:
diff changeset
4 Permission is granted to anyone to make or distribute verbatim copies
Dave Love <fx@gnu.org>
parents:
diff changeset
5 of this document as received, in any medium, provided that the
Dave Love <fx@gnu.org>
parents:
diff changeset
6 copyright notice and permission notice are preserved,
Dave Love <fx@gnu.org>
parents:
diff changeset
7 and that the distributor grants the recipient permission
Dave Love <fx@gnu.org>
parents:
diff changeset
8 for further redistribution as permitted by this notice.
Dave Love <fx@gnu.org>
parents:
diff changeset
9
Dave Love <fx@gnu.org>
parents:
diff changeset
10 Permission is granted to distribute modified versions
Dave Love <fx@gnu.org>
parents:
diff changeset
11 of this document, or of portions of it,
Dave Love <fx@gnu.org>
parents:
diff changeset
12 under the above conditions, provided also that they
Dave Love <fx@gnu.org>
parents:
diff changeset
13 carry prominent notices stating who last changed them.
Dave Love <fx@gnu.org>
parents:
diff changeset
14
Dave Love <fx@gnu.org>
parents:
diff changeset
15 ** Some useful techniques
Dave Love <fx@gnu.org>
parents:
diff changeset
16
Dave Love <fx@gnu.org>
parents:
diff changeset
17 `Fsignal' is a very useful place to stop in.
Dave Love <fx@gnu.org>
parents:
diff changeset
18 All Lisp errors go through there.
Dave Love <fx@gnu.org>
parents:
diff changeset
19
Dave Love <fx@gnu.org>
parents:
diff changeset
20 It is useful, when debugging, to have a guaranteed way
Dave Love <fx@gnu.org>
parents:
diff changeset
21 to return to the debugger at any time. If you are using
Dave Love <fx@gnu.org>
parents:
diff changeset
22 interrupt-driven input, which is the default, then Emacs is using
Dave Love <fx@gnu.org>
parents:
diff changeset
23 RAW mode and the only way you can do it is to store
Dave Love <fx@gnu.org>
parents:
diff changeset
24 the code for some character into the variable stop_character:
Dave Love <fx@gnu.org>
parents:
diff changeset
25
Dave Love <fx@gnu.org>
parents:
diff changeset
26 set stop_character = 29
Dave Love <fx@gnu.org>
parents:
diff changeset
27
Dave Love <fx@gnu.org>
parents:
diff changeset
28 makes Control-] (decimal code 29) the stop character.
Dave Love <fx@gnu.org>
parents:
diff changeset
29 Typing Control-] will cause immediate stop. You cannot
Dave Love <fx@gnu.org>
parents:
diff changeset
30 use the set command until the inferior process has been started.
Dave Love <fx@gnu.org>
parents:
diff changeset
31 Put a breakpoint early in `main', or suspend the Emacs,
Dave Love <fx@gnu.org>
parents:
diff changeset
32 to get an opportunity to do the set command.
Dave Love <fx@gnu.org>
parents:
diff changeset
33
Dave Love <fx@gnu.org>
parents:
diff changeset
34 If you are using cbreak input (see the Lisp function set-input-mode),
Dave Love <fx@gnu.org>
parents:
diff changeset
35 then typing Control-g will cause a SIGINT, which will return control
32523
4881cd839f12 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 25853
diff changeset
36 to GDB immediately if you type this command first:
25853
Dave Love <fx@gnu.org>
parents:
diff changeset
37
32523
4881cd839f12 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents: 25853
diff changeset
38 handle 2 stop
25853
Dave Love <fx@gnu.org>
parents:
diff changeset
39
Dave Love <fx@gnu.org>
parents:
diff changeset
40
Dave Love <fx@gnu.org>
parents:
diff changeset
41 ** Examining Lisp object values.
Dave Love <fx@gnu.org>
parents:
diff changeset
42
Dave Love <fx@gnu.org>
parents:
diff changeset
43 When you have a live process to debug, and it has not encountered a
Dave Love <fx@gnu.org>
parents:
diff changeset
44 fatal error, you can use the GDB command `pr'. First print the value
Dave Love <fx@gnu.org>
parents:
diff changeset
45 in the ordinary way, with the `p' command. Then type `pr' with no
Dave Love <fx@gnu.org>
parents:
diff changeset
46 arguments. This calls a subroutine which uses the Lisp printer.
Dave Love <fx@gnu.org>
parents:
diff changeset
47
Dave Love <fx@gnu.org>
parents:
diff changeset
48 If you can't use this command, either because the process can't run
Dave Love <fx@gnu.org>
parents:
diff changeset
49 a subroutine or because the data is invalid, you can fall back on
Dave Love <fx@gnu.org>
parents:
diff changeset
50 lower-level commands.
Dave Love <fx@gnu.org>
parents:
diff changeset
51
Dave Love <fx@gnu.org>
parents:
diff changeset
52 Use the `xtype' command to print out the data type of the last data
Dave Love <fx@gnu.org>
parents:
diff changeset
53 value. Once you know the data type, use the command that corresponds
Dave Love <fx@gnu.org>
parents:
diff changeset
54 to that type. Here are these commands:
Dave Love <fx@gnu.org>
parents:
diff changeset
55
Dave Love <fx@gnu.org>
parents:
diff changeset
56 xint xptr xwindow xmarker xoverlay xmiscfree xintfwd xboolfwd xobjfwd
Dave Love <fx@gnu.org>
parents:
diff changeset
57 xbufobjfwd xkbobjfwd xbuflocal xbuffer xsymbol xstring xvector xframe
Dave Love <fx@gnu.org>
parents:
diff changeset
58 xwinconfig xcompiled xcons xcar xcdr xsubr xprocess xfloat xscrollbar
Dave Love <fx@gnu.org>
parents:
diff changeset
59
Dave Love <fx@gnu.org>
parents:
diff changeset
60 Each one of them applies to a certain type or class of types.
Dave Love <fx@gnu.org>
parents:
diff changeset
61 (Some of these types are not visible in Lisp, because they exist only
Dave Love <fx@gnu.org>
parents:
diff changeset
62 internally.)
Dave Love <fx@gnu.org>
parents:
diff changeset
63
Dave Love <fx@gnu.org>
parents:
diff changeset
64 Each x... command prints some information about the value, and
Dave Love <fx@gnu.org>
parents:
diff changeset
65 produces a GDB value (subsequently available in $) through which you
Dave Love <fx@gnu.org>
parents:
diff changeset
66 can get at the rest of the contents.
Dave Love <fx@gnu.org>
parents:
diff changeset
67
Dave Love <fx@gnu.org>
parents:
diff changeset
68 In general, most of the rest of the contents will be addition Lisp
Dave Love <fx@gnu.org>
parents:
diff changeset
69 objects which you can examine in turn with the x... commands.
Dave Love <fx@gnu.org>
parents:
diff changeset
70
Dave Love <fx@gnu.org>
parents:
diff changeset
71 ** If GDB does not run and your debuggers can't load Emacs.
Dave Love <fx@gnu.org>
parents:
diff changeset
72
Dave Love <fx@gnu.org>
parents:
diff changeset
73 On some systems, no debugger can load Emacs with a symbol table,
Dave Love <fx@gnu.org>
parents:
diff changeset
74 perhaps because they all have fixed limits on the number of symbols
Dave Love <fx@gnu.org>
parents:
diff changeset
75 and Emacs exceeds the limits. Here is a method that can be used
Dave Love <fx@gnu.org>
parents:
diff changeset
76 in such an extremity. Do
Dave Love <fx@gnu.org>
parents:
diff changeset
77
Dave Love <fx@gnu.org>
parents:
diff changeset
78 nm -n temacs > nmout
Dave Love <fx@gnu.org>
parents:
diff changeset
79 strip temacs
Dave Love <fx@gnu.org>
parents:
diff changeset
80 adb temacs
Dave Love <fx@gnu.org>
parents:
diff changeset
81 0xd:i
Dave Love <fx@gnu.org>
parents:
diff changeset
82 0xe:i
Dave Love <fx@gnu.org>
parents:
diff changeset
83 14:i
Dave Love <fx@gnu.org>
parents:
diff changeset
84 17:i
Dave Love <fx@gnu.org>
parents:
diff changeset
85 :r -l loadup (or whatever)
Dave Love <fx@gnu.org>
parents:
diff changeset
86
Dave Love <fx@gnu.org>
parents:
diff changeset
87 It is necessary to refer to the file `nmout' to convert
Dave Love <fx@gnu.org>
parents:
diff changeset
88 numeric addresses into symbols and vice versa.
Dave Love <fx@gnu.org>
parents:
diff changeset
89
Dave Love <fx@gnu.org>
parents:
diff changeset
90 It is useful to be running under a window system.
Dave Love <fx@gnu.org>
parents:
diff changeset
91 Then, if Emacs becomes hopelessly wedged, you can create
Dave Love <fx@gnu.org>
parents:
diff changeset
92 another window to do kill -9 in. kill -ILL is often
Dave Love <fx@gnu.org>
parents:
diff changeset
93 useful too, since that may make Emacs dump core or return
Dave Love <fx@gnu.org>
parents:
diff changeset
94 to adb.
Dave Love <fx@gnu.org>
parents:
diff changeset
95
Dave Love <fx@gnu.org>
parents:
diff changeset
96
Dave Love <fx@gnu.org>
parents:
diff changeset
97 ** Debugging incorrect screen updating.
Dave Love <fx@gnu.org>
parents:
diff changeset
98
Dave Love <fx@gnu.org>
parents:
diff changeset
99 To debug Emacs problems that update the screen wrong, it is useful
Dave Love <fx@gnu.org>
parents:
diff changeset
100 to have a record of what input you typed and what Emacs sent to the
Dave Love <fx@gnu.org>
parents:
diff changeset
101 screen. To make these records, do
Dave Love <fx@gnu.org>
parents:
diff changeset
102
Dave Love <fx@gnu.org>
parents:
diff changeset
103 (open-dribble-file "~/.dribble")
Dave Love <fx@gnu.org>
parents:
diff changeset
104 (open-termscript "~/.termscript")
Dave Love <fx@gnu.org>
parents:
diff changeset
105
Dave Love <fx@gnu.org>
parents:
diff changeset
106 The dribble file contains all characters read by Emacs from the
Dave Love <fx@gnu.org>
parents:
diff changeset
107 terminal, and the termscript file contains all characters it sent to
Dave Love <fx@gnu.org>
parents:
diff changeset
108 the terminal. The use of the directory `~/' prevents interference
Dave Love <fx@gnu.org>
parents:
diff changeset
109 with any other user.
Dave Love <fx@gnu.org>
parents:
diff changeset
110
Dave Love <fx@gnu.org>
parents:
diff changeset
111 If you have irreproducible display problems, put those two expressions
Dave Love <fx@gnu.org>
parents:
diff changeset
112 in your ~/.emacs file. When the problem happens, exit the Emacs that
Dave Love <fx@gnu.org>
parents:
diff changeset
113 you were running, kill it, and rename the two files. Then you can start
Dave Love <fx@gnu.org>
parents:
diff changeset
114 another Emacs without clobbering those files, and use it to examine them.