For Development HEAD DRAFTSearch (procedure/syntax/module):

6.25 開発補助API

Gauche には開発者がプログラムを解析するための基本的な組込みAPIがあります。


6.25.1 デバッグ補助

Macro: debug-print expr

このマクロはexprをそのフォームのまま印字してから、その式を評価し、 評価の結果を印字し、その値を返します。

出力は現在のトレース出力ポート (current-trace-port) に行きます (ポート共通の操作参照)。

特殊リーダー構文 #?=expr(debug-print expr) に展開されます。 詳細については デバッグ を参照してください。

Parameter: debug-print-width

このパラメータはdebug-printが印字する情報の最大幅を指定するもの です。このパラメータが保持する値よりも大きいカラム数の情報は丸められま す。

すべての情報を表示したければ、このパラメータに#fを設定してくだ さい。

Macro: debug-funcall (proc arg …)

このマクロはprocを呼び出す直前に全てのargの値を表示し、 そしてprocの呼び出し後に全ての戻り値を表示します。

出力は現在のトレース出力ポート (current-trace-port) に行きます (ポート共通の操作参照)。

特別なリーダ構文 #?,expr(debug-funcall expr) に展開されます。詳しくは デバッグ を参照してください。

Macro: debug-print-conditionally test expr
Macro: debug-funcall-conditionally test (proc arg …)

debug-printおよびdebug-funcallのように動作しますが、 testが真の値に評価された時のみデバッグ出力を表示します。

これらは次のコードと機能的には同じです。

(if test
  (debug-print expr)
  expr)

(if test
  (debug-funcall (proc arg ...))
  (proc arg ...))

特別なリーダ構文 #??=test expr および #??,test expr はそれぞれ (debug-print-conditionally test expr)(debug-funcall-conditionally test expr) に展開されます。 詳しくは デバッグ を参照してください。

Function: debug-source-info obj

objに付加されているソースコード情報を検索します。ソースコード情 報とはソースコードファイル名と行番号のリストです。objにソースコー ド情報が付加されていなければ、#fが返されます。

Function: source-code closure

closureのソースコードが取り出せればそれを返します。そうでなければ #fを返します。

現在、Schemeソースから直接読み込まれた場合のみ、ソースコードが取り出せます。 プリコンパイルされたSchemeコードではソースコードは保存されません。 将来は変更されるかもしれません。

Function: source-location procedure

procedureが定義された場所(ファイル名と行番号)がわかればそれをリストにして 返します。わからなければ#fが返ります。

gosh> (use rfc.http)
gosh> (source-location http-get)
("/usr/share/gauche-0.9/0.9.5/lib/rfc/http.scm" 443)

procedureがsubrやプリコンパイルされた手続きの場合、 ファイル名は完全なパスではないかもしれません。

gosh> (source-location cons)
("liblist.scm" 46)
Function: disasm closure

コンパイル済のclosureの本体部分をディスアセンブルして印字します。 これはコンパイラのバグをなんとかしようという場合か、限界まで チューンしようとしないかぎりは役には立たないでしょう。

このディスアセンブラの出力結果を読む場合には、コンパイルされたコードに はデッドコードが含まれている可能性があることを心してください。デッドコー ドはジャンプ最適化によって生成されるのですが、コンパイラはこれをわざわ ざ除去することはしていません。

Function: debug-label obj

この手続きは、objについてほぼユニークな文字列を返します。 「ほぼ」ユニークというのは、 次のGCが起きるまでは、オブジェクトが同じ文字列を返したらeq?であり、 またeq?でないオブジェクト同士は異なる文字列を返すということです。

この文字列は、他に区別の手段がないような無名オブジェクトを印字する時に 使われることを想定しています。GCをまたいだ唯一性は保証されないので、 この手続きが返す文字列をオブジェクトを同定するキーとして使ってはいけません。


6.25.2 プロファイラAPI

ここに挙げている関数は、Gauche の組込みプロファイラを制御するためのも のです。プロファイラの説明については プロファイラを使う を参照してく ださい。

注意:現時点ではプロファイラはマルチスレッドプログラムでは正しく動作する 保証はありません。setitimerとスレッドの相互作用が プラットフォーム依存だからです。

Function: profiler-start

標本化プロファイラを始動します。プロファイラが既に始動しいる場合 には何もしません。

Function: profiler-stop

標本化プロファイラを停止し、標本データを内部データ構 造に保存します。既に標本データが保存されていた場合には、新 しく収集された標本データがその後に追加されます。もしプロファイラが動いてい なかった場合には何もしません。

Function: profiler-reset

もしプロファイラが動いていればそれを停止し、保存されていた標本データ を破棄します。

Function: profiler-show :key sort-by max-rows

格納されている標本データを表示します。

キーワード引数 sort-by は指定する場合は、timecount または time-per-call のどれかひとつです。 これで結果の整列順を指定します。デフォルトでは timeです。

キーワード引数 max-rows では結果を表示する最大行数を指定します。 この値が #f であればすべてのデータが表示されます。

Function: with-profiler thunk

手軽にプロファイリングするための手続きです。 プロファイラをonにしてthunkを呼び出し、結果をcurrent output port に出力します。thunkの戻り値が式の戻り値となります。 結果表示後、プロファイラはリセットされます。

この手続きをネストすることはできません。最も内側のwith-profilerが 結果をリセットしてしまうので、外側のwith-profilerに全ての情報が渡らないからです。



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT