Mercurial > emacs
annotate admin/emacs-pretesters @ 50798:2d72cdb7e9f8
(map_keymap_item, map_keymap_char_table_item, map_keymap)
(map_keymap_call, Fmap_keymap): New functions.
(syms_of_keymap): Defsubr map-keymap.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Sun, 04 May 2003 00:13:06 +0000 |
parents | 23a1cea22d13 |
children | 695cf19ef79e d7ddb3e565de |
rev | line source |
---|---|
44873
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
1 Here are the guidelines for being an Emacs pretester. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
2 If you would like to do this, say so, and I'll add you to |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
3 the pretest list. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
4 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
5 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
6 Information for Emacs Pretesters |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
7 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
8 The purpose of Emacs pretesting is to verify that the new Emacs |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
9 distribution, about to be released, works properly on your system *with |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
10 no change whatever*, when installed following the precise |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
11 recommendations that come with the Emacs distribution. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
12 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
13 Here are some guidelines on how to do pretesting so as to make it |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
14 helpful. All of them follow from common sense together with the |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
15 nature of the purpose and the situation. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
16 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
17 Please save this file, and reread it when a new series of pretests |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
18 starts. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
19 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
20 * Get the pretest from gnu/emacs/emacs-MM.NN.tar.gz and |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
21 gnu/emacs/leim-MM.NN.tar.gz on alpha.gnu.org. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
22 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
23 * After a few days of testing, if there are no problems, please report |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
24 that Emacs works for you and what configuration you are testing it on. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
25 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
26 * If you want to communicate with other pretesters, send mail to |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
27 emacs-pretesters@gnu.org. I don't use that mailing list when I send |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
28 to you because I've found that mailing lists tend to amplify random |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
29 noise into long discussions or even arguments, and that can waste a |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
30 lot of time. But when you have a reason to ask other pretesters for |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
31 help, you can do it that way. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
32 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
33 * It is absolutely vital that you tell me about even the smallest |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
34 change or departure from the standard sources and procedure. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
35 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
36 Otherwise, you are not testing the same program that I asked you to |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
37 test. Testing a different program is usually of no use whatever. It |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
38 can even cause trouble if you fail to tell me that you tested some |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
39 other program instead of what I am about to release. I might think |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
40 that Emacs works, when in fact it has not even been tried, and might |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
41 have a glaring fault. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
42 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
43 * Don't use a site-load.el file or a site-init.el file when you pretest. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
44 Using either of those files means you are not testing Emacs as a typical |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
45 site would use it. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
46 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
47 Actually, it does no harm to test Emacs with such customizations *as |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
48 well as* testing it "out of the box". Anything you do that could find |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
49 a bug is useful, as long as you make sure I know exactly what you did. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
50 The important point is that testing with local changes is no |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
51 substitute for testing Emacs exactly as it is distributed. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
52 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
53 * Even changing the compilation options counts as a change in the |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
54 program. The Emacs sources specify which compilation options to use. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
55 Some of them are specified in makefiles, and some in machine-specific |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
56 configuration files. They also give you ways to override this--but if |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
57 you do, then you are not testing what ordinary users will do. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
58 Therefore, when pretesting, it is vital to test with the default |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
59 compilation options. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
60 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
61 (Testing with a different set of options can be useful *in addition*, |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
62 but not *instead of* the default options.) |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
63 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
64 * The machine and system configuration files of Emacs are parts of |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
65 Emacs. So when you test Emacs, you need to do it with the |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
66 configuration files that come with Emacs. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
67 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
68 If Emacs does not come with configuration files for a certain machine, |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
69 and you test it with configuration files that don't come with Emacs, |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
70 this is effectively changing Emacs. Because the crucial fact about |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
71 the planned release is that, without changes, it doesn't work on that |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
72 machine. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
73 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
74 To make Emacs work on that machine, I would need to install new |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
75 configuration files. That is not out of the question, since it is |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
76 safe--it certainly won't break any other machines that already work. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
77 But you will have to rush me the legal papers to give the FSF |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
78 permission to use such a large piece of text. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
79 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
80 * Look in the etc/MACHINES file. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
81 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
82 The etc/MACHINES file says which configuration files to use for your |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
83 machine, so use the ones that are recommended. If you guess, you might |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
84 guess wrong and encounter spurious difficulties. What's more, if you |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
85 don't follow etc/MACHINES then you aren't helping to test that its |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
86 recommendations are valid. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
87 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
88 The etc/MACHINES file may describe other things that you need to do |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
89 to make Emacs work on your machine. If so, you should follow these |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
90 recommendations also, for the same reason. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
91 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
92 * Send your problem reports to emacs-pretest-bug@gnu.org, not |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
93 bug-gnu-emacs. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
94 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
95 Sometimes I won't know what to do about a system-dependent issue, and |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
96 I may need people to tell me what happens if you try a certain thing |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
97 on a certain system. When this happens, I'll send out a query. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
98 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
99 * Don't delay sending information. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
100 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
101 When you test on a system and encounter no problems, please tell me |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
102 about it right away. That way, I will know that someone has tested |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
103 Emacs on that kind of system. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
104 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
105 Please don't wait for several days "to see if it really works before |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
106 you say anything." Tell me right away that Emacs seems basically to |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
107 work; then, if you notice a problem a few days later, tell me |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
108 immediately about that when you see it. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
109 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
110 It is okay if you double check things before reporting a problem, such |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
111 as to see if you can easily fix it. But don't wait very long. A good |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
112 rule to use in pretesting is always to tell me about every problem on |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
113 the same day you encounter it, even if that means you can't find a |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
114 solution before you report the problem. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
115 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
116 I'd much rather hear about a problem today and a solution tomorrow |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
117 than get both of them tomorrow at the same time. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
118 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
119 * Make each bug report self-contained. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
120 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
121 If you refer back to another message, whether from you or from someone |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
122 else, then it will be necessary for anyone who wants to investigate |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
123 the bug to find the other message. This may be difficult, it is |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
124 probably time-consuming. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
125 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
126 To help me save time, simply copy the relevant parts of any previous |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
127 messages into your own bug report. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
128 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
129 In particular, if I ask you for more information because a bug report |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
130 was incomplete, it is best to send me the *entire* collection of |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
131 relevant information, all together. If you send just the additional |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
132 information, that makes me do extra work. There is even a risk that |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
133 I won't remember what question you are sending me the answer to. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
134 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
135 * When you encounter a bug that manifests itself as a Lisp error, |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
136 try setting debug-on-error to t and making the bug happen again. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
137 Then you will get a Lisp backtrace. Including that in your bug report |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
138 is very useful. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
139 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
140 * Debugging optimized code is possible, if you compile with GCC, but |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
141 in some cases the optimized code can be confusing. If you are not |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
142 accustomed to that, recompile Emacs without -O. One way to do this is |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
143 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
144 make clean |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
145 make CFLAGS=-g |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
146 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
147 * If you use X windows, it is a good idea to run Emacs under GDB (or |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
148 some other suitable debugger) *all the time*, at least while |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
149 pretesting. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
150 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
151 Then, when Emacs crashes, you will be able to debug the live process, |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
152 not just a core dump. The `pr' command defined in src/.gdbinit is very |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
153 useful in this case for examining Lisp_Object values as they would |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
154 appear in Lisp. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
155 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
156 If you can't use `pr' because Emacs has got a fault already, or |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
157 because you have only a core dump, you can use `xtype' to look at the |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
158 type of a value, and then choose one of the other commands `xsymbol', |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
159 `xstring', `xcons', `xvector' and so on to examine the contents. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
160 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
161 I myself *always* run Emacs under GDB so that I can debug conveniently |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
162 if the occasion arises. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
163 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
164 * To get Lisp-level backtrace information within GDB, |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
165 look for stack frames that call Ffuncall. Select them one by one in GDB |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
166 and type this: |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
167 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
168 p *args |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
169 pr |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
170 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
171 This will print the name of the Lisp function called by that level |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
172 of function calling. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
173 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
174 By printing the remaining elements of args, you can see the argument |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
175 values. Here's how to print the first argument: |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44873
diff
changeset
|
176 |
44873
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
177 p args[1] |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
178 pr |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
179 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
180 If you do not have a live process, you can use xtype and the other |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
181 x... commands such as xsymbol to get such information, albeit less |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
182 conveniently. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
183 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
184 * Even with a live process, these x... commands are useful for |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
185 examining the fields in a buffer, window, process, frame or marker. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
186 Here's an example using concepts explained in the node "Value History" |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
187 of the GDB manual to print the variable frame from this line in |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
188 xmenu.c: |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
189 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
190 buf.frame_or_window = Fcons (frame, prefix); |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
191 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
192 First, use these commands: |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
193 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
194 cd src |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
195 gdb emacs |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
196 b xmenu.c:1209 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44873
diff
changeset
|
197 r -q |
44873
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
198 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
199 Then type C-x 5 2 to create a new frame, and it hits the breakpoint: |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
200 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
201 (gdb) p frame |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
202 $1 = 1077872640 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
203 (gdb) xtype |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
204 Lisp_Vectorlike |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
205 PVEC_FRAME |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
206 (gdb) xframe |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
207 $2 = (struct frame *) 0x3f0800 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
208 (gdb) p *$ |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
209 $3 = { |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44873
diff
changeset
|
210 size = 536871989, |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44873
diff
changeset
|
211 next = 0x366240, |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44873
diff
changeset
|
212 name = 809661752, |
44873
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
213 [...] |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
214 } |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
215 (gdb) p $3->name |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
216 $4 = 809661752 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
217 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
218 Now we can use `pr' to print the name of the frame: |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
219 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
220 (gdb) pr |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
221 "emacs@steenrod.math.nwu.edu" |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
222 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
223 * The Emacs C code heavily uses macros defined in lisp.h. So suppose |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
224 we want the address of the l-value expression near the bottom of |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
225 `kbd_buffer_store_event' from keyboard.c: |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
226 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
227 XVECTOR (kbd_buffer_frame_or_window)->contents[kbd_store_ptr |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
228 - kbd_buffer] |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
229 = event->frame_or_window); |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
230 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
231 XVECTOR is a macro, and therefore GDB does not know about it. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
232 GDB cannot evaluate p XVECTOR (kbd_buffer_frame_or_window). |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
233 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
234 However, you can use the xvector command in GDB to get the same |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
235 result. Here is how: |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
236 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
237 (gdb) p kbd_buffer_frame_or_window |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
238 $1 = 1078005760 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
239 (gdb) xvector |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
240 $2 = (struct Lisp_Vector *) 0x411000 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
241 0 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
242 (gdb) p $->contents[kbd_store_ptr - kbd_buffer] |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
243 $3 = 1077872640 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
244 (gdb) p &$ |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
245 $4 = (int *) 0x411008 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
246 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
247 * Here's a related example of macros and the GDB `define' command. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
248 There are many Lisp vectors such as `recent_keys', which contains the |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
249 last 100 keystrokes. We can print this Lisp vector |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
250 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
251 p recent_keys |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
252 pr |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
253 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
254 But this may be inconvenient, since `recent_keys' is much more verbose |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
255 than `C-h l'. We might want to print only the last 10 elements of |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
256 this vector. `recent_keys' is updated in keyboard.c by the command |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
257 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
258 XVECTOR (recent_keys)->contents[recent_keys_index] = c; |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
259 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
260 So we define a GDB command `xvector-elts', so the last 10 keystrokes |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44873
diff
changeset
|
261 are printed by |
44873
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
262 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
263 xvector-elts recent_keys recent_keys_index 10 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
264 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
265 where you can define xvector-elts as follows: |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
266 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
267 define xvector-elts |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
268 set $i = 0 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
269 p $arg0 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
270 xvector |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
271 set $foo = $ |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
272 while $i < $arg2 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44873
diff
changeset
|
273 p $foo->contents[$arg1-($i++)] |
44873
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
274 pr |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
275 end |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
276 document xvector-elts |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
277 Prints a range of elements of a Lisp vector. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
278 xvector-elts v n i |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
279 prints `i' elements of the vector `v' ending at the index `n'. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
280 end |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
281 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
282 * To debug what happens while preloading and dumping Emacs, |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
283 do `gdb temacs' and start it with `r -batch -l loadup dump'. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
284 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
285 If temacs actually succeeds when running under GDB in this way, do not |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
286 try to run the dumped Emacs, because it was dumped with the GDB |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
287 breakpoints in it. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
288 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
289 * If you encounter X protocol errors, try evaluating (x-synchronize t). |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
290 That puts Emacs into synchronous mode, where each Xlib call checks for |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
291 errors before it returns. This mode is much slower, but when you get |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
292 an error, you will see exactly which call really caused the error. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
293 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
294 * If the symptom of the bug is that Emacs fails to respond, don't |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
295 assume Emacs is `hung'--it may instead be in an infinite loop. To |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
296 find out which, make the problem happen under GDB and stop Emacs once |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
297 it is not responding. (If Emacs is using X Windows directly, you can |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
298 stop Emacs by typing C-z at the GDB job.) Then try stepping with |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
299 `step'. If Emacs is hung, the `step' command won't return. If it is |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
300 looping, `step' will return. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
301 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
302 If this shows Emacs is hung in a system call, stop it again and |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
303 examine the arguments of the call. In your bug report, state exactly |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
304 where in the source the system call is, and what the arguments are. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
305 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
306 If Emacs is in an infinite loop, please determine where the loop |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
307 starts and ends. The easiest way to do this is to use the GDB command |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
308 `finish'. Each time you use it, Emacs resumes execution until it |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
309 exits one stack frame. Keep typing `finish' until it doesn't |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
310 return--that means the infinite loop is in the stack frame which you |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
311 just tried to finish. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
312 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
313 Stop Emacs again, and use `finish' repeatedly again until you get back |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
314 to that frame. Then use `next' to step through that frame. By |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
315 stepping, you will see where the loop starts and ends. Also please |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
316 examine the data being used in the loop and try to determine why the |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
317 loop does not exit when it should. Include all of this information in |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
318 your bug report. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
319 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
320 * If certain operations in Emacs are slower than they used to be, here |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
321 is some advice for how to find out why. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
322 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
323 Stop Emacs repeatedly during the slow operation, and make a backtrace |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
324 each time. Compare the backtraces looking for a pattern--a specific |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
325 function that shows up more often than you'd expect. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
326 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
327 If you don't see a pattern in the C backtraces, get some Lisp |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
328 backtrace information by looking at Ffuncall frames (see above), and |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
329 again look for a pattern. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
330 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
331 When using X, you can stop Emacs at any time by typing C-z at GDB. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
332 When not using X, you can do this with C-g. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
333 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
334 * Configure tries to figure out what kind of system you have by |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
335 compiling and linking programs which calls various functions and looks |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
336 at whether that succeeds. The file config.log contains any messages |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
337 produced by compilers while running configure, to aid debugging if |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
338 configure makes a mistake. But note that config.cache reads: |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
339 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
340 # Giving --cache-file=/dev/null disables caching, for debugging configure. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
341 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
44873
diff
changeset
|
342 or more simply, |
44873
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
343 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
344 rm config.cache |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
345 ./configure |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
346 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
347 * Always be precise when talking about changes you have made. Show |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
348 things rather than describing them. Use exact filenames (relative to |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
349 the main directory of the distribution), not partial ones. For |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
350 example, say "I changed Makefile" rather than "I changed the |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
351 makefile". Instead of saying "I defined the MUMBLE macro", send a |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
352 diff. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
353 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
354 * Always use `diff -c' to make diffs. If you don't include context, it |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
355 may be hard for me to figure out where you propose to make the |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
356 changes. So I might have to ignore your patch. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
357 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
358 * When you write a fix, keep in mind that I can't install a change |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
359 that *might* break other systems without the risk that it will fail to |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
360 work and therefore require an additional cycle of pretesting. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
361 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
362 People often suggest fixing a problem by changing config.h or |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
363 src/ymakefile or even src/Makefile to do something special that a |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
364 particular system needs. Sometimes it is totally obvious that such |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
365 changes would break Emacs for almost all users. I can't possibly make |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
366 a change like that. All I can do is send it back to you and ask you |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
367 to find a fix that is safe to install. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
368 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
369 Sometimes people send fixes that *might* be an improvement in |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
370 general--but it is hard to be sure of this. I can install such |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
371 changes some of the time, but not during pretest, when I am trying to |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
372 get a new version to work reliably as quickly as possible. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
373 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
374 The safest changes for me to install are changes to the s- and m- |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
375 files. At least I know those can't affect most systems. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
376 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
377 Another safe kind of change is one that uses a conditional to make |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
378 sure it will apply only to a particular kind of system. Ordinarily, |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
379 that is a bad way to solve a problem, and I would want to find a |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
380 cleaner alternative. But the virtue of safety can make it superior at |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
381 pretest time. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
382 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
383 * Don't try changing Emacs *in any way* unless it fails to work unchanged. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
384 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
385 * Don't even suggest changes to add features or make something |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
386 cleaner. Every change I install could introduce a bug, so I won't |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
387 install a change during pretest unless I see it is *necessary*. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
388 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
389 * If you would like to suggest changes for purposes other than fixing |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
390 user-visible bugs, don't wait till pretest time. Instead, send them |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
391 after I have made a release that proves to be stable. Then I can give |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
392 your suggestions proper consideration. If you send them at pretest |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
393 time, I will have to defer them till later, and that might mean I |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
394 forget all about them. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
395 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
396 * In some cases, if you don't follow these guidelines, your |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
397 information might still be useful, but I might have to do more work to |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
398 make use of it. Unfortunately, I am so far behind in my work that I |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
399 just can't keep up unless you help me to do it efficiently. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
400 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
401 Some suggestions for debugging on MS Windows: |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
402 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
403 Marc Fleischeuers, Geoff Voelker and Andrew Innes |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
404 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
405 To debug emacs with Microsoft Visual C++, you either start emacs from |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
406 the debugger or attach the debugger to a running emacs process. To |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
407 start emacs from the debugger, you can use the file bin/debug.bat. The |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
408 Microsoft Developer studio will start and under Project, Settings, |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
409 Debug, General you can set the command-line arguments and emacs' |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
410 startup directory. Set breakpoints (Edit, Breakpoints) at Fsignal and |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
411 other functions that you want to examine. Run the program (Build, |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
412 Start debug). Emacs will start and the debugger will take control as |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
413 soon as a breakpoint is hit. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
414 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
415 You can also attach the debugger to an already running emacs process. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
416 To do this, start up the Microsoft Developer studio and select Build, |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
417 Start debug, Attach to process. Choose the emacs process from the |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
418 list. Send a break to the running process (Debug, Break) and you will |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
419 find that execution is halted somewhere in user32.dll. Open the stack |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
420 trace window and go up the stack to w32_msg_pump. Now you can set |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
421 breakpoints in emacs (Edit, Breakpoints). Continue the running emacs |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
422 process (Debug, Step out) and control will return to emacs, until a |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
423 breakpoint is hit. |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
424 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
425 To examine the contents of a lisp variable, you can use the function |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
426 'debug_print'. Right-click on a variable, select QuickWatch, and |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
427 place 'debug_print(' and ')' around the expression. Press |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
428 'Recalculate' and the output is sent to the 'Debug' pane in the Output |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
429 window. If emacs was started from the debugger, a console window was |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
430 opened at emacs' startup; this console window also shows the output of |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
431 'debug_print'. It is also possible to keep appropriately masked and |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
432 typecast lisp symbols in the Watch window, this is more convenient |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
433 when steeping though the code. For instance, on entering |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
434 apply_lambda, you can watch (struct Lisp_Symbol *) (0xfffffff & |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
435 args[0]). |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
436 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
437 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
438 Local Variables: |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
439 mode: text |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
440 End: |