Luaのビルトインデバッガの使い方解説
Luaにはデバッグ用のライブラリが用意されており、独自のデバッガを作成するための基本的な機能はすべて備わっています。それでも、Luaのデバッガはビルトインされておらず、Luaはオープンソースで開発者向けに多くのデバッガを作成しています。
デバッグ用Luaライブラリで利用できる機能を、用途とともに下表に示します。
上記のリストは、私たちが頻繁に使用するLuaデバッグ関数の完全なリストであり、上記の関数を使用し、より便利なデバッグライブラリを提供します。これらの関数を使用して、独自のデバッガを作成することは非常に複雑であり、最良の選択肢とは言えません。いずれにせよ、簡単なデバッグ関数を使用する例を見ていきます。
print(debug.traceback("Stack trace"))
print(debug.getinfo(1))
print("Stack trace end")
return 10
end
myfunction ()
print(debug.getinfo(1))
上記のプログラムを実行すると、以下のようなスタックトレース情報が得られます。
stack traceback:
test2.lua:2: in function 'myfunction'
test2.lua:8: in main chunk
[C]: ?
table: 0054C6C8
Stack trace end
上記のサンプルプログラムでは、デバッグライブラリにある debug.trace 関数を使用してスタックトレースを表示しています。
別の例
デバッグのために、ある関数のローカル変数を知っておく必要があることがよくあります。このような場合、setupvalue を使ってローカル変数を設定し、getupvalue を使ってローカル変数を取得することができます。以下に、その簡単な例を示します。
local n = 0
local k = 0
return function ()
k = n
n = n + 1
return n
end
end
counter = newCounter ()
print(counter())
print(counter())
local i = 1
repeat
name, val = debug.getupvalue(counter, i)
if name then
print ("index", i, name, "=", val)
if(name == "n") then
debug.setupvalue (counter,2,10)
end
i = i + 1
end -- if
until not name
print(counter())
上記のプログラムを実行すると、次のような出力が得られます。
2
index 1 k = 1
index 2 n = 2
11
この例では、呼び出されたときに毎回カウンターを更新しています。getupvalue関数を使って、ローカル変数の現在の状態を取得することができます。そして、そのローカル変数に新しい値を設定します。ここでは、演算が呼び出される前に n が 2 に設定されています。setupvalue関数を使って10に更新すると、カウンター関数が呼ばれたとき、3ではなく11が返されます。
デバッグタイプ
- コマンドラインデバッグ
- グラフィカルなデバッグ
コマンドラインデバッギング
コマンドラインデバッグとは、コマンドラインを使って、コマンドやprint文でデバッグを行うものです。以下にいくつか紹介しますが、Luaでは多くのコマンドライン・デバッガが利用可能です。
- RemDebug。RemDebugはLua 5.0と5.1のリモートデバッガです。他のLuaプログラムの実行をリモートで制御し、ブレークポイントを設定したり、プログラムの現在の状態を確認したりすることができます。また、RemDebugはCGILuaスクリプトのデバッグも可能です。
- clidebugger: 純粋なLuaで書かれたlua5.1用のシンプルなコマンドラインインターフェイスデバッガです。Lua5.1標準のライブラリ以外には依存していません。RemDebugにインスパイアされていますが、リモートデバイスは持っていません。
- ctrace LuaのAPIコールをトレースするツール。
- xdbLua。Windowsプラットフォーム用のシンプルなLuaコマンドラインデバッガです。
- LuaInterface - デバッガ。このプロジェクトは、LuaInterfaceデバッガーを拡張したものです。Lua上に構築されたLuaデバッギング・インタフェースをより高い次元で実現します。デバッガとのインタラクションは、イベントとメソッドコールによって行われます。
- Rldb: WindowsとLinux用のソケットを使ったリモートLUAデバッガです。既存のどのデバッガよりも多くの機能を提供することができます。
- ModDebug。他のLuaプログラムの実行をリモートで制御し、ブレークポイントを設定したり、現在のプログラムの状態を確認することが可能になります。
グラフィカルデバッギング
グラフィカルデバッグは、IDEが変数の値やスタックトレース情報などの様々な関連情報を提供し、視覚的なデバッグを提供します。IDEのブレークポイント、次のステップの制御、ステップイン、スキップ、その他のボタンを使用して実行されるステップの視覚的な表現があります。
グラフィカルなLuaデバッガは多数あり、以下のようなものがあります。
- SciTE:デフォルトのWindows IDEにおけるLuaは、ブレークポイント、ステップ、ステップイン、スキップ、ビュー変数など、様々なデバッグツールを提供します。
- Decoda リモートデバッグをサポートするグラフィカルなデバッガーです。
- ZeroBrane Studio。リモートデバッガ、スタックビュー、テーブルビュー、リモートコンソール、スタティックアナライザなどが統合されたLuaのIDE。LuaJIT、Love2d、Moai、その他のLuaエンジンで動作します。Windows、OSX、Linuxで利用可能で、オープンソースです。
- akdebugger: LuaのためのEclipseプラグイン - デバッガとエディタ。
- luaedit: リモートデバッグ、ローカルデバッグ、シンタックスハイライト、オートコンプリート提案リスト、パラメータ提案エンジン、事前ブレークポイント管理(ブレークポイントACシステムとヒットカウントを含む)、関数リスト、グローバルおよびローカル変数リスト、ビュー、問題解決重視の管理機能
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン