スクリプトのデバッグ

端末型デバッガ

C:\> pnuts -d { script }
C:\> pnuts -d:file scriptFile
C:\> pnuts -d:file -e expression

pnuts コマンドに-d オプションをつけるとデバッグモードでインタプリタを実行します。デバッグ・コマンドについては、「デバッグコマンド」を参照。

デバッガは、ASTインタプリタでのみ動作します。(コンパイラとは一緒に動作しません。)

例:
C:\> pnuts -d
Copyright (c) 1997-1999 Sun Microsystems, Inc. All rights reserved.
Pnuts interpreter Version 1.0beta4, 1.2.2 (Sun Microsystems Inc.)
> 1
# Stopped at ?:1
 >>> 1
debug>

-d:ファイル が指定されると、ファイルからデバッグ・コマンドが読み込まれます。

例:
C:\> pnuts -d:trace.dbg -e 'getProperty("java.version")'
reading /tmp/trace.dbg
# Stopped at ?:1
 >>> getProperty("java.version")
debug> trace
on
debug> cont
jar:file:/usr/local/pnuts/modules/pnuts-modules.jar!/pnuts/util/property.pnut:1 >>> import("java.lang.System")
jar:file:/usr/local/pnuts/modules/pnuts-modules.jar!/pnuts/util/property.pnut:2 >>> import("java.util.Properties")
jar:file:/usr/local/pnuts/modules/pnuts-modules.jar!/pnuts/util/property.pnut:3 >>> import("java.io.InputStream")
jar:file:/usr/local/pnuts/modules/pnuts-modules.jar!/pnuts/util/property.pnut:4 >>> import("java.io.File")
jar:file:/usr/local/pnuts/modules/pnuts-modules.jar!/pnuts/util/property.pnut:5 >>> import("java.io.FileInputStream")
jar:file:/usr/local/pnuts/modules/pnuts-modules.jar!/pnuts/util/property.pnut:7 >>> function setProperty(name, val) {
 prop = System::getProperties()
 if (val == null) {
  prop.remove(name)
 } else {
  prop.put(name, val)
 }
}
jar:file:/usr/local/pnuts/modules/pnuts-modules.jar!/pnuts/util/property.pnut:16 >>> function getProperty(name) {
 System::getProperty(name)
}
jar:file:/usr/local/pnuts/modules/pnuts-modules.jar!/pnuts/util/property.pnut:20 >>> function loadProperties(resourceOrStream) {
 loadProperties(resourceOrStream, Properties())
}
jar:file:/usr/local/pnuts/modules/pnuts-modules.jar!/pnuts/util/property.pnut:24 >>> function loadProperties(input, prop) {
 if (input instanceof String) {
  url = getResource(input)
  if (url == null) {
   return null
  }
  prop.load(openURL(url))
 } else if (input instanceof File) {
  prop.load(fd = open(input))
  fd.close()
 } else if (input instanceof InputStream) {
  prop.load(input)
 } else {
  throw(IllegalArgumentException(string(input)))
 }
 prop
}
jar:file:/usr/local/pnuts/modules/pnuts-modules.jar!/pnuts/util/property.pnut:16 >>> {
 System::getProperty(name)
}
jar:file:/usr/local/pnuts/modules/pnuts-modules.jar!/pnuts/util/property.pnut:17 >>> System::getProperty(name)
# Returns "1.4.2"
trace.dbg
trace
cont

デバッグ・コマンド

stop at {ファイル名:}行
ファイル名:行で実行を中断する
stop in 関数{:N引数}
関数が呼ばれたときに実行を中断する。N引数が指定された場合、N引数の関数を対象にする。
clear
すべてのブレークポイントをクリアする。
cont
実行を続ける。
trace
トレースモードをトグルさせる。(デフォルトは false)
trace function {関数名}
関数トレースモードをトグルさせる。(デフォルトは false)
step {NUM}
NUM ステップ実行する。 (デフォルトは 1 ステップ)
step up
実行中の関数から抜ける
next {NUM}
NUM 行実行する (関数呼び出しを通過する)。 (デフォルトは 1 行)
help
コマンドの要約を表示する。
?
helpと同じ。
<その他>
Pnutsスクリプトとして評価します。

ビジュアル・デバッガ

pnuts コマンドの-vdオプションが指定された場合、端末型デバッガの変わりにビジュアル・デバッガが使われます。pnuts.debuggerプロパティについては「プロパティ」を参照。

pnuts -vd { target.pnut }

淡い青色の行は、現在の位置を表しています。オレンジ色は、その行にブレークポイントがあることを示します。 ブレークポイントの設定および解除は、右クリックで行います。