debugライブラリ
debugライブラリでスタックトレース、ローカル変数、upvalueを調査します。
「debugライブラリ」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。
debug ライブラリとは
debug ライブラリは、スタックフレーム、ローカル変数、upvalue、フック、コルーチンの状態など、Lua の内部へ低レベルでアクセスする機能を提供します。デバッグに使用し、本番ロジックでは使用しないでください。
debug.traceback
debug.traceback(msg, level) は、呼び出しスタックを含む文字列を返します。通常はエラーハンドラーとして xpcall に渡します。
local ok, err = xpcall(function()
error("something went wrong")
end, debug.traceback)
print(err)debug.getinfo
debug.getinfo(fn, what) は、関数に関する情報を含むテーブルを返します。関数名、ソース、定義行などを取得できます。
local function foo() end
local info = debug.getinfo(foo, "Sl")
print(info.source, info.linedefined)スタックレベルの調査
debug.getinfo に整数を渡すと、特定のスタックフレームを調査できます。レベル1は現在の関数、レベル2は呼び出し元です。
local function where()
local info = debug.getinfo(2, "Sl")
return info.short_src .. ":" .. info.currentline
end
print(where())debug.getlocal と debug.setlocal
debug.getlocal(level, n) は、スタックフレーム内にある n 番目のローカル変数の名前と値を返します。
local function example()
local x = 42
print(debug.getlocal(1, 1)) -- x 42
end
example()debug.getupvalue と debug.setupvalue
関数の upvalue を調査および変更します。getupvalue(fn, n) は名前と値を返します。
local x = 10
local function f() return x end
print(debug.getupvalue(f, 1)) -- x 10
debug.setupvalue(f, 1, 99)
print(f()) -- 99debug.sethook
debug.sethook(fn, mask, count) は、イベント発生時に呼び出されるフックを設定します。イベントは "c"(呼び出し)、"r"(return)、"l"(行)、または N 命令ごとの実行です。
local calls = 0
debug.sethook(function() calls = calls + 1 end, "c")
-- ... run some code ...
debug.sethook() -- remove hook
print("calls:", calls)debug.getmetatable
debug.getmetatable(obj) は、__metatable フィールドによって getmetatable がブロックされている場合でも、メタテーブルを取得します。
debug.upvalueid と upvaluejoin
debug.upvalueid(fn, n) は、upvalue の一意な識別子を返します。debug.upvaluejoin(f1,n1,f2,n2) は、それらが同じセルを共有するようにします。
注意:debug ライブラリのリスク
debug ライブラリはカプセル化を破り、不変条件を壊す可能性があります。本番コードでは決して使用しないでください。テスト、プロファイリング、開発ツールに限定して使用してください。
xpcall での debug.traceback
debug の本番環境で最も一般的かつ安全な使い方は、詳細なエラーメッセージを得るために debug.traceback を xpcall のエラーハンドラーとして渡すことです。
debug ライブラリに関する質問
本番環境のエラー処理で安全かつ一般的に使われる debug 関数はどれですか?
復習:debug ライブラリ
debug ライブラリは、スタックフレーム、ローカル変数、upvalue、フックを公開します。詳細なエラー情報を得るには debug.traceback を xpcall とともに使用し、それ以外は開発者向けの調査ツールとして扱ってください。
AI チューターと学ぶ Lua — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 40
- レッスン
- 159
よくある質問
「debugライブラリ」レッスンは無料ですか?
はい。「debugライブラリ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。
「debugライブラリ」で何を学びますか?
debugライブラリでスタックトレース、ローカル変数、upvalueを調査します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Lua Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「debugライブラリ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLua Academyレッスンでコードを書いて実行できますか?
はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- mathライブラリ関数
- tableライブラリ関数
- osとioライブラリ
- debugライブラリ