Examples cleanup
[maxima.git] / doc / info / ja / Debugging.texi
blob1fede092c4a899d29b77cf8023e00c5daa8bb692
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} @category{Global flags}
238 @closecatbox
239 @end defvr
241 @c -----------------------------------------------------------------------------
242 @anchor{refcheck}
243 @defvr {オプション変数} refcheck
244 デフォルト値: @code{false}
246 @code{refcheck}が@code{true}の時、
247 Maximaは
248 計算の中で、バイドされた変数が最初に使われる度にメッセージを印字します。
250 @opencatbox
251 @category{Evaluation} @category{Console interaction} @category{Global flags}
252 @closecatbox
253 @end defvr
255 @c -----------------------------------------------------------------------------
256 @anchor{setcheck}
257 @defvr {オプション変数} setcheck
258 デフォルト値: @code{false}
260 もし@code{setcheck}が(添字付きでもよい)変数のリストに設定されているなら、
261 Maximaは
262 変数またはそれらの添字付き出現が通常の割り当て演算子@code{:}、@code{::}割り当て演算子、
263 または関数引数バインドでバインドされた時
264 (しかし関数割り当て@code{:=}やマクロ割り当て@code{::=}演算子でバインドされた時以外)
265 はいつでも、
266 メッセージを印字します。
267 メッセージは変数名とバインドされた値から構成されます。
269 @code{setcheck}は、
270 @code{all}または@code{true}に設定することができ、
271 それによって、すべての変数を含みます。
273 @code{setcheck}の新しい要素のそれぞれは、
274 チェックする変数の新しいリストを確立し、
275 以前@code{setcheck}に割り当てられたいかなる変数も忘れられます。
277 もし自身以外の何かに評価されるなら、
278 @code{setcheck}に割り当てられた名前はクォートしなければいけません。
279 例えば、もし@code{x}, @code{y}, @code{z}が既にバインドされているなら、
280 チェックする変数のリストに置くには、
282 @example
283 setcheck: ['x, 'y, 'z]$
284 @end example
286 をタイプしてください。
288 @code{setcheck}リスト上の変数が、例えば、@code{X: 'X}のように、
289 それ自身に割り当てられた時は、なにも印字されません。
291 @opencatbox
292 @category{Console interaction} @category{Global flags}
293 @closecatbox
294 @end defvr
296 @c -----------------------------------------------------------------------------
297 @anchor{setcheckbreak}
298 @defvr {オプション変数} setcheckbreak
299 デフォルト値: @code{false}
301 @code{setcheckbreak}が@code{true}の時、
302 @code{setcheck}リスト上の変数が新しい値を割り当てられた時はいつでも
303 Maximaはブレイクプロンプトを出します。
304 ブレイクは、割り当てが実行される前に起こります。
305 この時点で、@code{setval}が変数が割り当てられようとしている値を保持します。
306 ゆえに、
307 @code{setval}に割り当てることで、違う値を割り当てることができます。
309 @code{setcheck}と@code{setval}も参照してください。
311 @opencatbox
312 @category{Console interaction} @category{Global flags}
313 @closecatbox
314 @end defvr
316 @c -----------------------------------------------------------------------------
317 @anchor{setval}
318 @defvr {システム変数} setval
320 @code{setcheckbreak}が起こった時、変数が設定されようとしている値を保持します。
321 ゆえに、
322 @code{setval}に割り当てることで、違う値を割り当てることができます。
324 @code{setcheck}と@code{setcheckbreak}も参照してください。
326 @opencatbox
327 @category{Console interaction} @category{Global variables}
328 @closecatbox
329 @end defvr
331 @c -----------------------------------------------------------------------------
332 @anchor{timer}
333 @deffn  {関数} timer (@var{f_1}, @dots{}, @var{f_n})
334 @deffnx {関数} timer (all)
335 @deffnx {関数} timer ()
337 @code{timer}は、
338 タイミング統計が収集される関数のリストに与えられた関数@var{f_1}, @dots{}, @var{f_n}
339 それぞれを入れます。
340 @code{timer(f)$ timer(g)$}は、リストに@code{f}を入れ、その後@code{g}を入れます;
341 リストはあるコールから次へ累積されます。
343 @code{timer(all)}は、計測される関数のリストに
344 (グローバル変数@code{functions}で指名されたように)
345 ユーザー定義関数すべてを入れます。
347 引数なしでは、
348 @code{timer}は計測される関数のリストを返します。
350 Maximaは、計測される関数のリストに関して、
351 関数それぞれを実行するのに費やされる時間を記録します。
352 @code{timer_info}は、タイミング統計を返します。
353 関数コール毎に経過した平均時間、コール回数、総経過時間を含みます。
354 @code{untimer}は、計測される関数のリストから関数を削除します。
356 @code{timer}は引数をクォートします。
357 @code{f(x) := x^2$ g:f$ timer(g)$}は、@code{f}をタイマーリストに入れません。
359 もし@code{trace(f)}が有効なら、@code{timer(f)}は有効ではないです;
360 @code{trace}と@code{timer}が同時に有効にはできません。
362 @code{timer_devalue}も参照してください。
364 @opencatbox
365 @category{Debugging}
366 @closecatbox
367 @end deffn
369 @c -----------------------------------------------------------------------------
370 @anchor{untimer}
371 @deffn {関数} untimer (@var{f_1}, @dots{}, @var{f_n})
372 @deffnx {関数} untimer ()
374 @code{untimer}はタイマーリストから
375 与えられた関数@var{f_1}, @dots{}, @var{f_n}それぞれを削除します。
377 引数なしの時、
378 @code{untimer}は、現在、タイマーリスト上の関数すべてを削除します。
380 @code{untimer (f)}が実行された後、
381 @code{timer_info()} (引数なし)は、
382 現在タイマーリスト上にない関数についての情報を返しませんけれども、
383 @code{timer_info (f)}は、まだ以前に集計されたタイミング統計を返します。
384 @code{timer (f)}は、
385 タイミング統計すべてをゼロに再設定し、
386 @code{f}をタイマーリストに再び入れます。
388 @opencatbox
389 @category{Debugging}
390 @closecatbox
391 @end deffn
393 @c -----------------------------------------------------------------------------
394 @anchor{timer_devalue}
395 @defvr {オプション変数} timer_devalue
396 デフォルト値: @code{false}
398 @code{timer_devalue}が@code{true}の時、
399 Maximaは、計られる関数から
400 他の計測される関数で費やされた時間を引きます。
401 そうでなければ、関数それぞれについて報告された時間は、
402 他の関数で計測される時間を含みます。
403 計測されない関数で費やされた時間は、総時間から引かれないことに注意してください。
405 @code{timer}と@code{timer_info}も参照してください。
407 @opencatbox
408 @category{Debugging} @category{Global flags}
409 @closecatbox
410 @end defvr
412 @c -----------------------------------------------------------------------------
413 @anchor{timer_info}
414 @deffn {関数} timer_info (@var{f_1}, ..., @var{f_n})
415 @deffnx {関数} timer_info ()
417 与えられた関数@var{f_1}, ..., @var{f_n},
418 @code{timer_info}は、
419 関数それぞれのタイミング情報を含む
420 行列を返します。
421 引数なしでは、
422 @code{timer_info}は、
423 現在タイマーリスト上の関数すべてについての
424 タイミング情報を返します。
425 The matrix returned by 
426 @code{timer_info}が返す行列は、関数名、
427 関数コール毎の時間、関数コールの回数、総時間、
428 @code{gctime}
429 を含みます。
430 @code{gctime}は、元のMacymaの「ガーベッジコレクション時間」を意味しましたが、
431 今はいつもゼロです。
433 @code{timer_info}が戻り値を構成するデータは、
434 @code{get}関数によっても得られることができます:
436 @example
437 get(f, 'calls);  get(f, 'runtime);  get(f, 'gctime);
438 @end example
440 @code{timer}も参照してください。
442 @opencatbox
443 @category{Debugging}
444 @closecatbox
445 @end deffn
447 @c -----------------------------------------------------------------------------
448 @anchor{trace}
449 @deffn  {関数} trace (@var{f_1}, @dots{}, @var{f_n})
450 @deffnx {関数} trace (all)
451 @deffnx {関数} trace ()
453 関数 @var{f_1}, @dots{}, @var{f_n}が与えられたとして、
454 @code{trace}は、Maximaに、
455 それらの関数がコールされたときはいつでも
456 デバッグ情報を印字するよう指示します。
457 @code{trace(f)$ trace(g)$}は、トレースする関数のリストに
458 @code{f}を、それから@code{g}を入れます;
459 リストは1回のコールから次へ累積します。
461 @code{trace(all)}は、(グローバル変数@code{functions}で指名されたように)
462 ユーザー定義関数すべてをトレースする関数のリストに入れます。
464 引数なしでは、
465 @code{trace}は、現在とレースする関数すべてのリストを返します。
467 @code{untrace}関数はトレースをディセーブルします。
468 @code{trace_options}も参照してください。
470 @code{trace}は引数をクォートします。
471 例えば、
472 @code{f(x) := x^2$ g:f$ trace(g)$}は、
473 @code{f}をトレースリストに入れません。
475 関数が再定義された時、
476 タイマーリストから削除されます。
477 例えば、
478 @code{timer(f)$ f(x) := x^2$}の後、
479 関数@code{f}はもはやタイマーリストにありません。
481 もし@code{timer (f)}が有効なら、
482 @code{trace (f)}は有効ではありません;
483 @code{trace}と@code{timer}は、同じ関数で同時には有効にできません。
485 @opencatbox
486 @category{Debugging}
487 @closecatbox
488 @end deffn
490 @c -----------------------------------------------------------------------------
491 @anchor{trace_options}
492 @deffn  {関数} trace_options (@var{f}, @var{option_1}, @dots{}, @var{option_n})
493 @deffnx {関数} trace_options (@var{f})
495 関数@var{f}についてトレースオプションを設定します。
496 いかなる以前のオプションも破棄されます。
497 @code{trace_options (@var{f}, ...)}は、
498 もし(@code{trace_options}の前でも後でも). 
499 @code{trace (@var{f})}もコールされないなら、
500 有効になりません。
502 @code{trace_options (@var{f})}は、
503 オプションすべてをデフォルト値に再設定します。
505 オプションキーワードは以下の通りです:
507 @itemize @bullet
508 @item
509 @code{noprint}
510 関数の入り口と出口でメッセージを印字しません。
511 @item
512 @code{break}
513 関数に入る前と関数を抜けた後、ブレイクポイントを置きます。
514 @code{break}を参照してください。
515 @item
516 @code{lisp_print}
517 引数を表示し、Lispオブジェクトとして値を返します。
518 @item
519 @code{info}
520 関数の入れ口と出口で@code{-> true}を印字します
521 @item
522 @code{errorcatch}
523 エラーをチャッチし、
524 エラーを知らせるためのオプションに応じて、
525 関数コールを再試行するか、戻り値を指定します。
526 @end itemize
528 トレースオプションは、2つの形式で指定されます。
529 オプションキーワード単体の存在は、
530 オプションを無条件に実行します。
531 (@code{@var{foo}: true}か似た形式を指定することでは、
532 オプション@var{foo}は実行されないことに注意してください;
533 キーワードはクォートする必要はないことにも注意してください。)
534 オプションキーワードを述語論理関数で指定することは、
535 オプションを述語論理上の条件付きにします。
537 述語論理関数の引数リストは、いつも
538 @code{[level, direction, function, item]}です。
539 ここで、@code{level}は関数の再帰レベルで、
540 @code{direction}は@code{enter}か@code{exit}、@code{function}は、
541 関数名、
542 name of the function, and 
543 @code{item}は(入るときの)引数リストか(出るときの)戻り値です。
545 以下は無条件とレースオプションの例です:
547 @example
548 (%i1) ff(n) := if equal(n, 0) then 1 else n * ff(n - 1)$
550 (%i2) trace (ff)$
552 (%i3) trace_options (ff, lisp_print, break)$
554 (%i4) ff(3);
555 @end example
557 以下は述語論理上の条件の@code{break}オプションを持つ同じ関数です:
559 @example
560 (%i5) trace_options (ff, break(pp))$
562 (%i6) pp (level, direction, function, item) := block (print (item),
563     return (function = 'ff and level = 3 and direction = exit))$
565 (%i7) ff(6);
566 @end example
568 @opencatbox
569 @category{Debugging}
570 @closecatbox
571 @end deffn
573 @c -----------------------------------------------------------------------------
574 @anchor{untrace}
575 @deffn  {関数} untrace (@var{f_1}, @dots{}, @var{f_n})
576 @deffnx {関数} untrace ()
578 @code{untrace}は、
579 与えられた関数@var{f_1}, @dots{}, @var{f_n}について、
580 @code{trace}関数でイネーブルされたトレースをディセーブルします。
581 引数なしでは、@code{untrace}は関数すべてのトレースをディセーブルします。
583 @code{untrace}はトレースをディセーブルした関数のリストを返します。
585 @opencatbox
586 @category{Debugging}
587 @closecatbox
588 @end deffn