Lua Academy · レッスン

debugライブラリ

debugライブラリでスタックトレース、ローカル変数、upvalueを調査します。

レッスン 4/413 ステップ

「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())  -- 99

debug.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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. mathライブラリ関数
  2. tableライブラリ関数
  3. osとioライブラリ
  4. debugライブラリ
← Lua Academyに戻る