OutputView(出力ビュー)
エラー情報やトレース情報を表示します。「>>>」の印がついている行はダブルクリックにより指定されたソース行へジャンプすることができます。
GlobalWatch(グローバル変数ウォッチ)
グローバル変数が表示されます。値の変更はできません。
RegistryWatch(レジストリ変数ウォッチ)
レジストリ変数が表示されます。値の変更はできません。
LocalWatch(ローカル変数ウォッチ)
その時点で選択されている関数コンテキスト中のローカル変数が表示されます。値の変更はできません。
EnvironWatch(環境変数ウォッチ)
その時点で選択されている関数コンテキストの環境変数が表示されます。値の変更はできません。
Watch(変数ウォッチ)
設定された任意の評価式の値を表示します。具体的には、実行中の関数コンテキスト内で実際に評価式を実行して値を得ます。
式に副作用がある場合は気をつけてください。評価式が呼ばれるタイミングや回数は変わることがあります。
Backtrace(関数呼び出し履歴)
関数の呼び出し履歴をcoroutineをまたいで表示します。それがlua関数なら、その欄を選択することで関数コンテキストをその関数に変更することができます。
InteractiveView(インタラクティブ)
その時点で与えられている関数コンテキストでLua命令を実行します。ビューに表示されるのは戻り値となる変数(複数可)で、例えば
return 0, 2 + 3, tostring(0.563)
を実行すると
0 5 "0.563"
が表示されます。実際に式を評価して値を得ているわけです。また簡便な方法として
$ 評価式(, 評価式2, 評価式3)
と入力すると、それは
return lldebug.tostring_detail(評価式, 評価式2, 評価式3)
と解釈され、その式の値を表示します。'lldebug.tostring_detail'はオブジェクトを文字列に変換するためのオリジナル関数です。これは置き換えることが可能です。
InteractiveView(インタラクティブ)の仕様
式を評価するとき、IntaractiveView(インタラクティブ)は、だいたい以下のような関数を実行しています。
(function () -- その時点で選択されている関数コンテキストのローカル変数や環境変数からnameという名前の -- フィールドを探し、見つかった場合はそれを返し、見つから無かった場合はnilを返します。 -- 実際にはCの関数です。 -- local function index_func(table, name) ... end
-- その時点で選択されている関数コンテキストのローカル変数や環境変数からnameという名前の -- フィールドを探し、見つかった場合はそれに値を設定し、見つから無かった場合はエラーを返します。 -- 実際にはCの関数です。 -- local function newindex_func(table, name, value) ... end
-- その環境ではグローバル変数にアクセスできない可能性があるので、 -- ここでローカル変数として設定し、確実なアクセスを行います。 local lldebug = lldebug
-- 環境テーブルを変更し、変数値の取得/設定を完全にフックします。 local mt = {__index = index_func, __newindex = newindex_func} setfenv(1, setmetatable({}, mt))
-- ここで与えられた命令を実行します。 <User defined string>
-- 例えば 'func(0)' という命令なら、環境テーブルのおかげで -- funcはこの関数のローカル変数ではなく mt.__index によって検索されます。 end)()
ユーザーから与えれれた命令は常に関数の最後に置かれるので、'return'をつければそれが関数の戻り値となります。また、命令はエミュレートではなく実際に実行します。副作用に気をつけてください。
また、ステップ実行などのデバッグ付きで命令を実行することはできません。
WatchView(変数ウォッチ) の仕様
InteractiveView(インタラクティブ)と同じような要領で
return <与えられた評価式>
のeval実行を行います。戻り値は一つしか表示できません。
用語説明
「その時点で選択されている関数コンテキスト」とは
ローカル変数ウォッチなどでは「どの関数のローカル変数か?」ということが非常に重要になります。通常はデバッグ停止中の関数ということになるでしょうが、たとえばバックトレースで関数を選択したときなどはその関数を対象にしたくなりますよね。
そこでこの「その時点で選択されている関数コンテキスト」とは、通常はデバッグ停止中の関数のことを指しますが、バックトレースで選択された時はその関数のことを指します。このコンテキストはローカル変数ウォッチ以外にも、環境変数ウォッチやインタラクティブに影響を与えます。
(正確にはLocalWatch/EnvironWatch/Watch/InteractiveViewです)
バックトレースで選択された場合、その効果はデバッグを進めるか他の関数を選択するまで継続されます。