Fix bug #1848: taytorat leaks internal gensyms from multivar expansions
[maxima.git] / doc / info / ja / Debugging.texi
blobe524ea094045c249afe9154df3453d1d0cee55b5
1 @menu
2 * Source Level Debugging::
3 * Keyword Commands::
4 * Functions and Variables for Debugging::   
5 @end menu
7 @c -----------------------------------------------------------------------------
8 @node Source Level Debugging, Keyword Commands, , Debugging
9 @section Source Level Debugging
10 @c -----------------------------------------------------------------------------
12 Maximaは、組み込みのソースレベルデバッガを持っています。
13 ユーザーは、関数にブレイクポイントを設定でき、
14 そこから行毎に実行することができます。
15 そのレベルでバインドされた変数と一緒にコールスタックを検査することができます。
17 コマンド@code{:help}または@code{:h}は、
18 デバッガーコマンドのリストを示します。
19 (一般的に、
20 もし略字がただ1つなら、コマンドは略せます。
21 もしただ1つでないなら、選択肢がリストされます。)
22 デバッガー内では、
23 変数と式を検査し、定義し、操作するために、ユーザーは任意の通常のMaxima関数も使うことができます。
25 Maximaプロンプトで、
26 @code{:br}コマンドで
27 ブレイクポイントが設定できます。
28 デバッガー内では、
29 ユーザーは、
30 @code{:n} (``next'')コマンドを使って1度に1行進むことができます。
31 @code{:bt} (``backtrace'')コマンドは、スタックフレームのリストを示します。
32 @code{:r} (``resume'')コマンドは、デバッガーから抜けて、実行を続けます。
33 以下の例で、これらのコマンドを例示します。
35 @example
36 (%i1) load ("/tmp/foobar.mac");
38 (%o1)                           /tmp/foobar.mac
40 (%i2) :br foo
41 Turning on debugging debugmode(true)
42 Bkpt 0 for foo (in /tmp/foobar.mac line 1) 
44 (%i2) bar (2,3);
45 Bkpt 0:(foobar.mac 1)
46 /tmp/foobar.mac:1::
48 (dbm:1) :bt                        <-- :bt typed here gives a backtrace
49 #0: foo(y=5)(foobar.mac line 1)
50 #1: bar(x=2,y=3)(foobar.mac line 9)
52 (dbm:1) :n                         <-- Here type :n to advance line
53 (foobar.mac 2)
54 /tmp/foobar.mac:2::
56 (dbm:1) :n                         <-- Here type :n to advance line
57 (foobar.mac 3)
58 /tmp/foobar.mac:3::
60 (dbm:1) u;                         <-- Investigate value of u
63 (dbm:1) u: 33;                     <-- Change u to be 33
66 (dbm:1) :r                         <-- Type :r to resume the computation
68 (%o2)                                1094
69 @end example
71 ファイル@code{/tmp/foobar.mac}は以下の通りです:
73 @example
74 foo(y) := block ([u:y^2],
75   u: u+3,
76   u: u^2,
77   u);
79 bar(x,y) := (
80   x: x+2,
81   y: y+2,
82   x: foo(y),
83   x+y);
84 @end example
86 EMACSを通してのデバッガーの使用
88 もしユーザーがシェルウィンドウ(dblシェル)で、GNU emacsの下でコードを走らせているか、
89 グラフィカルならインターフェイスバージョンXmaximaを走らせているなら、
90 もしブレイクポイントで停止させたら、
91 ウィンドウの他の半面に表示されるソースファイルの中に、
92 赤でハイライトされたか、右行を示す小さな矢印で
93 現在位置を見るでしょう。
94 M-n (Alt-n)をタイプすることで、一度に一行進めることができます。
96 Emacsの下では、
97 @code{dbl}シェルの中で走らせなければいけません。
98 @code{dbl}シェルは、elispディレクトリの中に
99 @code{dbl.el}ファイルを要求します。
100 elispファイルをインストールしたか、Maxima elispディレクトリをパスに足したかを確認してください:
101 例えば、以下を
102 @file{.emacs}ファイルか@file{site-init.el}に足してください。
104 @example
105 (setq load-path (cons "/usr/share/maxima/5.9.1/emacs" load-path))
106 (autoload 'dbl "dbl")
107 @end example
109 すると、emacsの中で、
111 @example
112 M-x dbl
113 @end example
115 は、例えば、Maxima, gcl, gbbなどのプログラムを走らせることができるシェルウィンドウを開始するでしょう。
116 このシェルウィンドウはソースレベルデバッグや
117 他のウィンドウのソースコードの表示についても知っています。
119 ユーザーは、
120 @code{C-x space}をタイプすることで
121 ファイルのある行に
122 ブレイクポイントを設定できます。
123 これは、カーソルがどの関数の中かがわかり、
124 カーソルが示すその関数のどの行かわかります。
125 もしカーソルが、例えば、@code{foo}の行2なら、
126 @code{foo}を二番目の行でブレイクするために、
127 他のウィンドウの中で、コマンド``@code{:br foo 2}''を挿入します。
128 これをイネーブルにするには、
129 ユーザーは
130 ファイル@code{foobar.mac}が訪れるウィンドウの中で
131 maxima-mode.elを機能させなければいけません。
132 @code{Alt-Control-x}をタイプすることで
133 関数をMaximaに評価ような、
134 そのファイルウィンドウで利用可能な追加のコマンドがあります。
136 @opencatbox
137 @category{Debugging}
138 @closecatbox
140 @c -----------------------------------------------------------------------------
141 @node Keyword Commands, Functions and Variables for Debugging, Source Level Debugging, Debugging
142 @section Keyword Commands
143 @c -----------------------------------------------------------------------------
145 キーワードコマンドは、Maxima式として解釈(interpret)されない特殊キーワードです。
146 キーワードコマンドは、ブレイクプロンプトではできませんが、Maximaプロンプトやデバッガープロンプトで入力できます。
147 キーワードコマンドはコロン'@code{:}'で始まります。
148 例えば、Lisp形を評価するには、
149 may type 
150 @code{:lisp}の後に評価される形式をタイプします。
152 @example
153 (%i1) :lisp (+ 2 3) 
155 @end example
157 取られる引数の数は、特定のコマンドに依存します。
158 コマンド全体をタイプする必要はありません、ただブレイクキーワードの中で唯一であれば十分です。
159 例えば、@code{:br}は @code{:break}のために十分です。
161 キーワードコマンドは以下にリストされます。
163 @table @code
164 @item :break F n
165 関数@code{F}の中に関数の頭から行オフセット@code{n}で
166 ブレイクポイントを設定します。 
167 もし@code{F}が文字列として与えられたら、
168 ファイルと仮定され、@code{n}はファイルの頭からのオフセットです。
169 オフセットはオプションです。
170 もし与えられないなら、ゼロと仮定されます。
171 (関数かファイルの最初の行。)
172 @item :bt
173 スタックフレームのバックトレイスを印字します。
174 @item :continue
175 計算を継続します。
176 @c CAN'T SEEM TO GET :delete TO WORK !!!
177 @item :delete
178 指定されたブレイクポイントを、もし指定されないならすべてのブレイクポイントを削除します。
179 @c CAN'T SEEM TO GET :disable TO WORK !!!
180 @item :disable
181 指定されたブレイクポイントを、もし指定されないならすべてのブレイクポイントをディセーブルにします。
182 @c CAN'T SEEM TO GET :enable TO WORK !!!
183 @item :enable
184 指定されたブレイクポイントを、もし指定されないならすべてのブレイクポイントをイネーブルにします。
185 @item :frame n
186 スタックフレーム@code{n}を、もし指定されないなら現在のフレームを印字します。
187 @c CAN'T SEEM TO GET :help TO WORK !!!
188 @item :help
189 デバッガーコマンドに関するヘルプを印字します。
190 もし指定されないなら、コマンドすべてのヘルプを印字します。
191 @c CAN'T SEEM TO GET :info TO WORK !!!
192 @item :info
193 項目についての情報を印字します。
194 @item :lisp some-form
195 @code{some-form}をLisp形式として評価します。
196 @item :lisp-quiet some-form
197 Lisp形式@code{some-form}を出力せずに評価します。
198 @item :next
199 @code{:next}は関数コールをステップオーバーする点を除いて、
200 @code{:step}のようなものです。
201 @item :quit
202 計算を完了せずに、
203 現在のデバッガーレベルから抜けます。
204 @item :resume
205 計算を継続します。
206 @item :step
207 新しいソー行に至るまで計算を継続します。
208 @item :top
209 計算を完了せずに(任意のデバッガーレベルから)Maximaプロンプトに戻ります。
210 @end table 
212 @opencatbox
213 @category{Debugging}
214 @closecatbox
216 @c -----------------------------------------------------------------------------
217 @node Functions and Variables for Debugging, , Keyword Commands, Debugging
218 @section Functions and Variables for Debugging
219 @c -----------------------------------------------------------------------------
221 @c -----------------------------------------------------------------------------
222 @anchor{debugmode}
223 @defvr {オプション変数} debugmode
224 デフォルト値: @code{false}
226 もし@code{debugmode}が @code{true}なら、
227 Maximaのエラーが起こった時Maximaはデバッガーを開始します。
228 ユーザーはコールバックを検査したり、ブレイクポイントを設定したり、Maximaコードをステップ実行したりなど
229 コマンドを入力することができます。
230 デバッガーコマンドのリストに関しては、 @code{debugging}を参照してください。
232 @code{debugmode}をイネーブルにしても、Lispのエラーは捕らえられません。
233 @c DO WE WANT TO SAY MORE ABOUT DEBUGGING LISP ERRORS ???
234 @c I'M NOT CONVINCED WE WANT TO OPEN THAT CAN OF WORMS !!!
236 @opencatbox
237 @category{Debugging}
238 @category{Global flags}
239 @closecatbox
240 @end defvr
242 @c -----------------------------------------------------------------------------
243 @anchor{refcheck}
244 @defvr {オプション変数} refcheck
245 デフォルト値: @code{false}
247 @code{refcheck}が@code{true}の時、
248 Maximaは
249 計算の中で、バイドされた変数が最初に使われる度にメッセージを印字します。
251 @opencatbox
252 @category{Evaluation}
253 @category{Console interaction}
254 @category{Global flags}
255 @closecatbox
256 @end defvr
258 @c -----------------------------------------------------------------------------
259 @anchor{setcheck}
260 @defvr {オプション変数} setcheck
261 デフォルト値: @code{false}
263 もし@code{setcheck}が(添字付きでもよい)変数のリストに設定されているなら、
264 Maximaは
265 変数またはそれらの添字付き出現が通常の割り当て演算子@code{:}、@code{::}割り当て演算子、
266 または関数引数バインドでバインドされた時
267 (しかし関数割り当て@code{:=}やマクロ割り当て@code{::=}演算子でバインドされた時以外)
268 はいつでも、
269 メッセージを印字します。
270 メッセージは変数名とバインドされた値から構成されます。
272 @code{setcheck}は、
273 @code{all}または@code{true}に設定することができ、
274 それによって、すべての変数を含みます。
276 @code{setcheck}の新しい要素のそれぞれは、
277 チェックする変数の新しいリストを確立し、
278 以前@code{setcheck}に割り当てられたいかなる変数も忘れられます。
280 もし自身以外の何かに評価されるなら、
281 @code{setcheck}に割り当てられた名前はクォートしなければいけません。
282 例えば、もし@code{x}, @code{y}, @code{z}が既にバインドされているなら、
283 チェックする変数のリストに置くには、
285 @example
286 setcheck: ['x, 'y, 'z]$
287 @end example
289 をタイプしてください。
291 @code{setcheck}リスト上の変数が、例えば、@code{X: 'X}のように、
292 それ自身に割り当てられた時は、なにも印字されません。
294 @opencatbox
295 @category{Console interaction}
296 @category{Global flags}
297 @closecatbox
298 @end defvr
300 @c -----------------------------------------------------------------------------
301 @anchor{setcheckbreak}
302 @defvr {オプション変数} setcheckbreak
303 デフォルト値: @code{false}
305 @code{setcheckbreak}が@code{true}の時、
306 @code{setcheck}リスト上の変数が新しい値を割り当てられた時はいつでも
307 Maximaはブレイクプロンプトを出します。
308 ブレイクは、割り当てが実行される前に起こります。
309 この時点で、@code{setval}が変数が割り当てられようとしている値を保持します。
310 ゆえに、
311 @code{setval}に割り当てることで、違う値を割り当てることができます。
313 @code{setcheck}と@code{setval}も参照してください。
315 @opencatbox
316 @category{Console interaction}
317 @category{Global flags}
318 @closecatbox
319 @end defvr
321 @c -----------------------------------------------------------------------------
322 @anchor{setval}
323 @defvr {システム変数} setval
325 @code{setcheckbreak}が起こった時、変数が設定されようとしている値を保持します。
326 ゆえに、
327 @code{setval}に割り当てることで、違う値を割り当てることができます。
329 @code{setcheck}と@code{setcheckbreak}も参照してください。
331 @opencatbox
332 @category{Console interaction}
333 @category{Global variables}
334 @closecatbox
335 @end defvr
337 @c -----------------------------------------------------------------------------
338 @anchor{timer}
339 @deffn  {関数} timer (@var{f_1}, @dots{}, @var{f_n})
340 @deffnx {関数} timer (all)
341 @deffnx {関数} timer ()
343 @code{timer}は、
344 タイミング統計が収集される関数のリストに与えられた関数@var{f_1}, @dots{}, @var{f_n}
345 それぞれを入れます。
346 @code{timer(f)$ timer(g)$}は、リストに@code{f}を入れ、その後@code{g}を入れます;
347 リストはあるコールから次へ累積されます。
349 @code{timer(all)}は、計測される関数のリストに
350 (グローバル変数@code{functions}で指名されたように)
351 ユーザー定義関数すべてを入れます。
353 引数なしでは、
354 @code{timer}は計測される関数のリストを返します。
356 Maximaは、計測される関数のリストに関して、
357 関数それぞれを実行するのに費やされる時間を記録します。
358 @code{timer_info}は、タイミング統計を返します。
359 関数コール毎に経過した平均時間、コール回数、総経過時間を含みます。
360 @code{untimer}は、計測される関数のリストから関数を削除します。
362 @code{timer}は引数をクォートします。
363 @code{f(x) := x^2$ g:f$ timer(g)$}は、@code{f}をタイマーリストに入れません。
365 もし@code{trace(f)}が有効なら、@code{timer(f)}は有効ではないです;
366 @code{trace}と@code{timer}が同時に有効にはできません。
368 @code{timer_devalue}も参照してください。
370 @opencatbox
371 @category{Debugging}
372 @closecatbox
373 @end deffn
375 @c -----------------------------------------------------------------------------
376 @anchor{untimer}
377 @deffn {関数} untimer (@var{f_1}, @dots{}, @var{f_n})
378 @deffnx {関数} untimer ()
380 @code{untimer}はタイマーリストから
381 与えられた関数@var{f_1}, @dots{}, @var{f_n}それぞれを削除します。
383 引数なしの時、
384 @code{untimer}は、現在、タイマーリスト上の関数すべてを削除します。
386 @code{untimer (f)}が実行された後、
387 @code{timer_info()} (引数なし)は、
388 現在タイマーリスト上にない関数についての情報を返しませんけれども、
389 @code{timer_info (f)}は、まだ以前に集計されたタイミング統計を返します。
390 @code{timer (f)}は、
391 タイミング統計すべてをゼロに再設定し、
392 @code{f}をタイマーリストに再び入れます。
394 @opencatbox
395 @category{Debugging}
396 @closecatbox
397 @end deffn
399 @c -----------------------------------------------------------------------------
400 @anchor{timer_devalue}
401 @defvr {オプション変数} timer_devalue
402 デフォルト値: @code{false}
404 @code{timer_devalue}が@code{true}の時、
405 Maximaは、計られる関数から
406 他の計測される関数で費やされた時間を引きます。
407 そうでなければ、関数それぞれについて報告された時間は、
408 他の関数で計測される時間を含みます。
409 計測されない関数で費やされた時間は、総時間から引かれないことに注意してください。
411 @code{timer}と@code{timer_info}も参照してください。
413 @opencatbox
414 @category{Debugging}
415 @category{Global flags}
416 @closecatbox
417 @end defvr
419 @c -----------------------------------------------------------------------------
420 @anchor{timer_info}
421 @deffn {関数} timer_info (@var{f_1}, ..., @var{f_n})
422 @deffnx {関数} timer_info ()
424 与えられた関数@var{f_1}, ..., @var{f_n},
425 @code{timer_info}は、
426 関数それぞれのタイミング情報を含む
427 行列を返します。
428 引数なしでは、
429 @code{timer_info}は、
430 現在タイマーリスト上の関数すべてについての
431 タイミング情報を返します。
432 The matrix returned by 
433 @code{timer_info}が返す行列は、関数名、
434 関数コール毎の時間、関数コールの回数、総時間、
435 @code{gctime}
436 を含みます。
437 @code{gctime}は、元のMacymaの「ガーベッジコレクション時間」を意味しましたが、
438 今はいつもゼロです。
440 @code{timer_info}が戻り値を構成するデータは、
441 @code{get}関数によっても得られることができます:
443 @example
444 get(f, 'calls);  get(f, 'runtime);  get(f, 'gctime);
445 @end example
447 @code{timer}も参照してください。
449 @opencatbox
450 @category{Debugging}
451 @closecatbox
452 @end deffn
454 @c -----------------------------------------------------------------------------
455 @anchor{trace}
456 @deffn  {関数} trace (@var{f_1}, @dots{}, @var{f_n})
457 @deffnx {関数} trace (all)
458 @deffnx {関数} trace ()
460 関数 @var{f_1}, @dots{}, @var{f_n}が与えられたとして、
461 @code{trace}は、Maximaに、
462 それらの関数がコールされたときはいつでも
463 デバッグ情報を印字するよう指示します。
464 @code{trace(f)$ trace(g)$}は、トレースする関数のリストに
465 @code{f}を、それから@code{g}を入れます;
466 リストは1回のコールから次へ累積します。
468 @code{trace(all)}は、(グローバル変数@code{functions}で指名されたように)
469 ユーザー定義関数すべてをトレースする関数のリストに入れます。
471 引数なしでは、
472 @code{trace}は、現在とレースする関数すべてのリストを返します。
474 @code{untrace}関数はトレースをディセーブルします。
475 @code{trace_options}も参照してください。
477 @code{trace}は引数をクォートします。
478 例えば、
479 @code{f(x) := x^2$ g:f$ trace(g)$}は、
480 @code{f}をトレースリストに入れません。
482 関数が再定義された時、
483 タイマーリストから削除されます。
484 例えば、
485 @code{timer(f)$ f(x) := x^2$}の後、
486 関数@code{f}はもはやタイマーリストにありません。
488 もし@code{timer (f)}が有効なら、
489 @code{trace (f)}は有効ではありません;
490 @code{trace}と@code{timer}は、同じ関数で同時には有効にできません。
492 @opencatbox
493 @category{Debugging}
494 @closecatbox
495 @end deffn
497 @c -----------------------------------------------------------------------------
498 @anchor{trace_options}
499 @deffn  {関数} trace_options (@var{f}, @var{option_1}, @dots{}, @var{option_n})
500 @deffnx {関数} trace_options (@var{f})
502 関数@var{f}についてトレースオプションを設定します。
503 いかなる以前のオプションも破棄されます。
504 @code{trace_options (@var{f}, ...)}は、
505 もし(@code{trace_options}の前でも後でも). 
506 @code{trace (@var{f})}もコールされないなら、
507 有効になりません。
509 @code{trace_options (@var{f})}は、
510 オプションすべてをデフォルト値に再設定します。
512 オプションキーワードは以下の通りです:
514 @itemize @bullet
515 @item
516 @code{noprint}
517 関数の入り口と出口でメッセージを印字しません。
518 @item
519 @code{break}
520 関数に入る前と関数を抜けた後、ブレイクポイントを置きます。
521 @code{break}を参照してください。
522 @item
523 @code{lisp_print}
524 引数を表示し、Lispオブジェクトとして値を返します。
525 @item
526 @code{info}
527 関数の入れ口と出口で@code{-> true}を印字します
528 @item
529 @code{errorcatch}
530 エラーをチャッチし、
531 エラーを知らせるためのオプションに応じて、
532 関数コールを再試行するか、戻り値を指定します。
533 @end itemize
535 トレースオプションは、2つの形式で指定されます。
536 オプションキーワード単体の存在は、
537 オプションを無条件に実行します。
538 (@code{@var{foo}: true}か似た形式を指定することでは、
539 オプション@var{foo}は実行されないことに注意してください;
540 キーワードはクォートする必要はないことにも注意してください。)
541 オプションキーワードを述語論理関数で指定することは、
542 オプションを述語論理上の条件付きにします。
544 述語論理関数の引数リストは、いつも
545 @code{[level, direction, function, item]}です。
546 ここで、@code{level}は関数の再帰レベルで、
547 @code{direction}は@code{enter}か@code{exit}、@code{function}は、
548 関数名、
549 name of the function, and 
550 @code{item}は(入るときの)引数リストか(出るときの)戻り値です。
552 以下は無条件とレースオプションの例です:
554 @example
555 (%i1) ff(n) := if equal(n, 0) then 1 else n * ff(n - 1)$
557 (%i2) trace (ff)$
559 (%i3) trace_options (ff, lisp_print, break)$
561 (%i4) ff(3);
562 @end example
564 以下は述語論理上の条件の@code{break}オプションを持つ同じ関数です:
566 @example
567 (%i5) trace_options (ff, break(pp))$
569 (%i6) pp (level, direction, function, item) := block (print (item),
570     return (function = 'ff and level = 3 and direction = exit))$
572 (%i7) ff(6);
573 @end example
575 @opencatbox
576 @category{Debugging}
577 @closecatbox
578 @end deffn
580 @c -----------------------------------------------------------------------------
581 @anchor{untrace}
582 @deffn  {関数} untrace (@var{f_1}, @dots{}, @var{f_n})
583 @deffnx {関数} untrace ()
585 @code{untrace}は、
586 与えられた関数@var{f_1}, @dots{}, @var{f_n}について、
587 @code{trace}関数でイネーブルされたトレースをディセーブルします。
588 引数なしでは、@code{untrace}は関数すべてのトレースをディセーブルします。
590 @code{untrace}はトレースをディセーブルした関数のリストを返します。
592 @opencatbox
593 @category{Debugging}
594 @closecatbox
595 @end deffn