Mercurial > emacs
annotate admin/emacs-pretesters @ 49506:ac9e2eeeb03d
New format of AUTHORS file; list each
author name once followed by contributed and changed files.
Improve selection of entries to include in list, and generate list
of unrecognized entries indicating syntax errors in ChangeLog files.
(authors-coding-system): New variable.
(authors-many-files): Update doc string.
(authors-aliases): Change format. Now one entry with multiple
aliases per author.
(authors-valid-file-names, authors-renamed-files-alist)
(authors-renamed-files-regexps): New variables.
(authors-canonical-file-name): New function. Validates that file
exists or occurs in one of the above lists. Record unrecognized
file names in global authors-invalid-file-names list.
(authors-add): Change to record per-change counts.
(authors-canonical-author-name): Handle new format of
authors-aliases list.
(authors-scan-change-log): Rename FILE arg to LOG-FILE.
Change doc string to describe new entry format.
Only add author entries for valid file names.
(authors-print): Replace by authors-add-to-author-list.
(authors-add-to-author-list): New function which reorders
per-file entries and adds them to global authors-author-list.
(authors): Instead of authors-print to insert in *Authors* buffer,
use authors-add-to-author-list to reorder the list and then
insert result in *Authors* buffer with new format.
Generate *Authors Errors* compilation-mode buffer listing
unrecognized ChangeLog entries.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Wed, 29 Jan 2003 00:13:11 +0000 |
parents | a3601f81ab2a |
children | 23a1cea22d13 |
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: |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
176 |
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 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
197 r -q |
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 = { |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
210 size = 536871989, |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
211 next = 0x366240, |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
212 name = 809661752, |
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 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
261 are printed by |
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 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
273 p $foo->contents[$arg1-($i++)] |
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 |
a3601f81ab2a
New file with information for Emacs pretesters.
Pavel Janík <Pavel@Janik.cz>
parents:
diff
changeset
|
342 or more simply, |
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: |