13 |
Description: |
Description: |
14 |
---------------------------------------------------------------------- |
---------------------------------------------------------------------- |
15 |
Name: Matthias Blume |
Name: Matthias Blume |
16 |
|
Date: 2000/06/27 16:51:00 JST |
17 |
|
Tag: blume-20000627-noweb |
18 |
|
Description: |
19 |
|
|
20 |
|
Changes: |
21 |
|
|
22 |
|
1. Implemented "subdir" and "witness" options for noweb tool. |
23 |
|
This caused some slight internal changes in CM's tool implementation. |
24 |
|
2. Fixed bug in "tool plugin" mechanism. This is essentially cleaning |
25 |
|
some remaining issues from earlier path anchor changes. |
26 |
|
3. Updated CM manual accordingly. |
27 |
|
|
28 |
|
4. Changed implementation of back-tracing so that I now consider it |
29 |
|
ready for prime-time. |
30 |
|
|
31 |
|
In particular, you don't have to explicitly trigger the back-trace |
32 |
|
anymore. Instead, if you are running BTrace-instrumented code and |
33 |
|
there is an uncaught exception (regardless of whether or not it was |
34 |
|
raised in instrumented code), the top-level evalloop will print |
35 |
|
the back-trace. |
36 |
|
|
37 |
|
Features: |
38 |
|
|
39 |
|
- Instrumented and uninstrumented code work together seemlessly. |
40 |
|
(Of course, uninstrumented code is never mentioned in actual |
41 |
|
back-traces.) |
42 |
|
|
43 |
|
- Asymptotic time- and space-complexity of instrumented code is |
44 |
|
equal to that of uninstrumented code. (This means that |
45 |
|
tail-recursion is preserved by the instrumentation phase.) |
46 |
|
|
47 |
|
- Modules whose code has been instrumented in different sessions |
48 |
|
work together without problem. |
49 |
|
|
50 |
|
- There is no penalty whatsoever on uninstrumented code. |
51 |
|
|
52 |
|
- There is no penalty on "raise" expressions, even in |
53 |
|
instrumented code. |
54 |
|
|
55 |
|
A potential bug (or perhaps it is a feature, too): |
56 |
|
|
57 |
|
A back-trace reaches no further than the outermost instrumented |
58 |
|
non-trivial "raise". Here, a "trivial" raise is one that is the |
59 |
|
sole RHS of a "handle" rule. Thus, back-traces reach trough |
60 |
|
|
61 |
|
<exp> handle e => raise e |
62 |
|
|
63 |
|
and even |
64 |
|
|
65 |
|
<exp> handle Foo => raise Bar |
66 |
|
|
67 |
|
and, of course, through |
68 |
|
|
69 |
|
<exp> handle Foo => ... |
70 |
|
|
71 |
|
if the exception was not Foo. |
72 |
|
|
73 |
|
Back-traces always reach right through any un-instrumented code |
74 |
|
including any of its "handle" expressions, trivial or not. |
75 |
|
|
76 |
|
To try this out, do the following: |
77 |
|
|
78 |
|
- Erase all existing binfiles for your program. |
79 |
|
(You may keep binfiles for those modules where you think you |
80 |
|
definitely don't need back-tracing.) |
81 |
|
- Turn on back-trace instrumentation: |
82 |
|
SMLofNJ.Internals.BTrace.mode (SOME true); |
83 |
|
- Recompile your program. (I.e., run "CM.make" or "use".) |
84 |
|
- You may now turn instrumentation off again (if you want): |
85 |
|
SMLofNJ.Internals.BTrace.mode (SOME false); |
86 |
|
- Run your program as usual. If it raises an exception that |
87 |
|
reaches the interactive toplevel, then a back-trace will |
88 |
|
automatically be printed. After that, the toplevel loop |
89 |
|
will print the exception history as usual. |
90 |
|
|
91 |
|
---------------------------------------------------------------------- |
92 |
|
Name: Matthias Blume |
93 |
Date: 2000/06/26 09:56:46 JST |
Date: 2000/06/26 09:56:46 JST |
94 |
Tag: blume-20000626-setup |
Tag: blume-20000626-setup |
95 |
Description: |
Description: |