Pustaka debug secara Mendalam
Gunakan debug.traceback, getinfo, getlocal, getupvalue untuk introspeksi.
Pustaka debug secara Mendalam adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Ikhtisar Pustaka debug
Pustaka debug adalah perangkat introspeksi Lua. Pustaka ini memungkinkan Anda memeriksa dan mengubah keadaan waktu proses dari fungsi, korutin, atau bingkai tumpukan mana pun.
Pembahasan Mendalam tentang debug.getinfo
debug.getinfo(f, what) menerima penanda what: "n" (nama), "S" (sumber), "l" (baris saat ini), "u" (variabel lingkup luar), "f" (referensi fungsi).
local function foo()
local info = debug.getinfo(1, "nSlu")
print(info.name) -- foo
print(info.short_src) -- source file
print(info.currentline) -- line number
print(info.nups) -- number of upvalues
end
foo()Memeriksa Variabel Lokal
debug.getlocal(level, n) mengembalikan nama dan nilai variabel lokal ke-n pada tingkat tumpukan tertentu. Tingkat 1 = fungsi saat ini.
local function example()
local x, y = 10, 20
local i = 1
while true do
local name, val = debug.getlocal(1, i)
if not name then break end
print(name, val)
i = i + 1
end
end
example() -- x 10 / y 20Mengubah Variabel Lokal
debug.setlocal(level, n, value) mengubah nilai variabel lokal saat waktu proses — sangat berguna untuk penelusuran kesalahan dan pengujian.
Memeriksa Variabel Lingkup Luar
debug.getupvalue(fn, n) mengembalikan nama dan nilai variabel lingkup luar ke-n dari suatu fungsi. Ulangi dengan n yang terus meningkat hingga nil dikembalikan.
local count = 0
local function inc() count = count + 1 end
print(debug.getupvalue(inc, 1)) -- count 0
debug.setupvalue(inc, 1, 99)
inc()
print(count) -- 100Menelusuri Tumpukan Panggilan
Telusuri seluruh tumpukan panggilan dengan menaikkan tingkat hingga debug.getinfo mengembalikan nil.
local function printStackTrace()
local level = 1
while true do
local info = debug.getinfo(level, "Sln")
if not info then break end
print(level, info.short_src, info.currentline, info.name)
level = level + 1
end
enddebug.traceback
debug.traceback(msg, level) mengembalikan string jejak tumpukan yang diformat. Ini adalah fungsi debug yang paling praktis untuk penanganan kesalahan dalam produksi.
Memeriksa Korutin
Teruskan korutin sebagai argumen pertama ke debug.getinfo untuk memeriksa tumpukannya.
local co = coroutine.create(function()
print(debug.getinfo(1, "l").currentline)
end)
coroutine.resume(co)debug.sethook untuk Pelacakan
Telusuri semua pemanggilan fungsi dalam program dengan menetapkan pengait call yang mencetak nama fungsi.
debug.sethook(function(event)
if event == "call" then
local info = debug.getinfo(2, "Sn")
print("CALL:", info.name or "?")
end
end, "c")Asersi Portabel
Gunakan debug.getinfo(2, "Sl") untuk menyertakan informasi berkas dan baris dalam kesalahan asersi.
local function assert2(cond, msg)
if not cond then
local info = debug.getinfo(2, "Sl")
error(("[%s:%d] %s"):format(info.short_src, info.currentline, msg), 2)
end
endPerhatian
Pustaka debug dapat melanggar enkapsulasi, memperlambat program secara signifikan (terutama debug.sethook), dan tidak tersedia di semua lingkungan. Gunakan hanya selama pengembangan dan pengujian.
Pertanyaan tentang Pustaka debug
Apa yang dikembalikan oleh debug.getupvalue(fn, 1)?
Ringkasan: Mendalami Pustaka debug
Pustaka debug menyediakan pemeriksaan tumpukan (getinfo), pemeriksaan dan pengubahan variabel lokal (getlocal/setlocal), akses ke variabel lingkup luar (getupvalue/setupvalue), serta pelacakan berbasis pengait (sethook). Gunakan secara bertanggung jawab hanya dalam pengembangan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pustaka debug secara Mendalam” gratis?
Ya — teks lengkap “Pustaka debug secara Mendalam” 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 secara Mendalam”?
Gunakan debug.traceback, getinfo, getlocal, getupvalue untuk introspeksi. 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 1 dari 4.
Berapa lama pelajaran “Pustaka debug secara Mendalam” 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.
Semua pelajaran dalam kursus ini
- Pustaka debug secara Mendalam
- Debug Jarak Jauh dengan MobDebug
- Pembuatan Profil dengan LuaProfiler
- Cakupan Kode dan Instrumentasi Test