Pustaka debug
Periksa traceback tumpukan, variabel lokal, dan upvalue dengan pustaka debug.
Pustaka debug adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.
Apa Itu Pustaka debug?
Pustaka debug menyediakan akses tingkat rendah ke bagian internal Lua: bingkai tumpukan, variabel lokal, upvalue, pengait, dan status coroutine. Gunakan untuk penelusuran kesalahan, bukan untuk logika produksi.
debug.traceback
debug.traceback(msg, level) mengembalikan string yang berisi tumpukan pemanggilan. Biasanya diteruskan ke xpcall sebagai penangan kesalahan.
local ok, err = xpcall(function()
error("something went wrong")
end, debug.traceback)
print(err)debug.getinfo
debug.getinfo(fn, what) mengembalikan tabel berisi informasi tentang suatu fungsi: nama, sumber, baris definisi, dan sebagainya.
local function foo() end
local info = debug.getinfo(foo, "Sl")
print(info.source, info.linedefined)Pemeriksaan Tingkat Tumpukan
Teruskan bilangan bulat ke debug.getinfo untuk memeriksa bingkai tumpukan tertentu. Tingkat 1 adalah fungsi saat ini, sedangkan tingkat 2 adalah pemanggilnya.
local function where()
local info = debug.getinfo(2, "Sl")
return info.short_src .. ":" .. info.currentline
end
print(where())debug.getlocal dan debug.setlocal
debug.getlocal(level, n) mengembalikan nama dan nilai variabel lokal ke-n dalam bingkai tumpukan.
local function example()
local x = 42
print(debug.getlocal(1, 1)) -- x 42
end
example()debug.getupvalue dan debug.setupvalue
Periksa dan ubah upvalue suatu fungsi. getupvalue(fn, n) mengembalikan nama dan nilainya.
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) menetapkan pengait yang dipanggil saat terjadi peristiwa: "c" (pemanggilan), "r" (pengembalian), "l" (baris), atau setiap N instruksi.
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) mengambil metatabel bahkan ketika getmetatable diblokir oleh bidang __metatable.
debug.upvalueid dan upvaluejoin
debug.upvalueid(fn, n) mengembalikan pengenal unik untuk sebuah upvalue. debug.upvaluejoin(f1,n1,f2,n2) membuat keduanya berbagi sel yang sama.
Perhatian: Risiko Pustaka debug
Pustaka debug dapat melanggar enkapsulasi dan merusak invarian. Jangan pernah menggunakannya dalam kode produksi. Batasi penggunaannya untuk pengujian, pembuatan profil, dan alat pengembangan.
debug.traceback dalam xpcall
Penggunaan debug yang paling umum dan aman untuk produksi adalah meneruskan debug.traceback sebagai penangan kesalahan ke xpcall agar pesan kesalahan lebih informatif.
Pertanyaan tentang Pustaka debug
Fungsi debug mana yang aman dan umum digunakan dalam penanganan kesalahan produksi?
Rangkuman: Pustaka debug
Pustaka debug mengekspos bingkai tumpukan, variabel lokal, upvalue, dan pengait. Gunakan debug.traceback dengan xpcall untuk mendapatkan kesalahan yang informatif; perlakukan fungsi lainnya sebagai alat introspeksi khusus pengembang.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pustaka debug” gratis?
Ya — teks lengkap “Pustaka debug” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pustaka debug”?
Periksa traceback tumpukan, variabel lokal, dan upvalue dengan pustaka debug. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Lua Academy?
Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Pustaka debug” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.