ไลบรารี debug เชิงลึก
ใช้ debug.traceback, getinfo, getlocal และ getupvalue เพื่อตรวจสอบภายใน
ไลบรารี debug เชิงลึก เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
ภาพรวมไลบรารี debug
ไลบรารี debug คือชุดเครื่องมือสำหรับตรวจสอบภายในของ Lua ซึ่งช่วยให้ตรวจสอบและแก้ไขสถานะขณะทำงานของฟังก์ชัน โครูทีน หรือเฟรมสแตกใด ๆ ได้
เจาะลึก debug.getinfo
debug.getinfo(f, what) รับแฟล็ก what ดังนี้: "n" หมายถึงชื่อ, "S" หมายถึงแหล่งที่มา, "l" หมายถึงบรรทัดปัจจุบัน, "u" หมายถึงอัปแวลู และ "f" หมายถึงการอ้างอิงฟังก์ชัน
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()การตรวจสอบตัวแปรเฉพาะที่
debug.getlocal(level, n) ส่งคืนชื่อและค่าของตัวแปรเฉพาะที่ลำดับที่ n ในระดับสแตกที่กำหนด ระดับ 1 หมายถึงฟังก์ชันปัจจุบัน
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 20การแก้ไขตัวแปรเฉพาะที่
debug.setlocal(level, n, value) เปลี่ยนค่าของตัวแปรเฉพาะที่ขณะทำงาน ซึ่งมีประโยชน์มากสำหรับการแก้จุดบกพร่องและการทดสอบ
การตรวจสอบอัปแวลู
debug.getupvalue(fn, n) ส่งคืนชื่อและค่าของอัปแวลูลำดับที่ n ของฟังก์ชัน ให้ทำซ้ำโดยเพิ่มค่า n จนกว่าจะส่งคืนค่า nil
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) -- 100การไล่ดูสแตก
ไล่ดูสแตกการเรียกใช้ทั้งหมดโดยเพิ่มระดับทีละหนึ่ง จนกว่า debug.getinfo จะส่งคืนค่า 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) ส่งคืนสตริงร่องรอยสแตกที่จัดรูปแบบแล้ว เป็นฟังก์ชัน debug ที่ใช้งานได้จริงมากที่สุดสำหรับการจัดการข้อผิดพลาดในระบบจริง
การตรวจสอบโครูทีน
ส่งโครูทีนเป็นอาร์กิวเมนต์แรกให้กับ debug.getinfo เพื่อตรวจสอบสแตกของโครูทีนนั้น
local co = coroutine.create(function()
print(debug.getinfo(1, "l").currentline)
end)
coroutine.resume(co)debug.sethook สำหรับการติดตาม
ติดตามการเรียกใช้ฟังก์ชันทั้งหมดในโปรแกรมโดยตั้งฮุกการเรียกใช้ที่แสดงชื่อฟังก์ชัน
debug.sethook(function(event)
if event == "call" then
local info = debug.getinfo(2, "Sn")
print("CALL:", info.name or "?")
end
end, "c")การยืนยันเงื่อนไขที่ใช้ได้หลายสภาพแวดล้อม
ใช้ debug.getinfo(2, "Sl") เพื่อเพิ่มข้อมูลไฟล์และบรรทัดลงในข้อผิดพลาดจากการยืนยันเงื่อนไข
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
endข้อควรระวัง
ไลบรารี debug อาจละเมิดการห่อหุ้ม ทำให้โปรแกรมทำงานช้าลงอย่างมาก โดยเฉพาะเมื่อใช้ debug.sethook และอาจไม่มีให้ใช้ในทุกสภาพแวดล้อม ควรใช้เฉพาะระหว่างการพัฒนาและการทดสอบ
คำถามเกี่ยวกับไลบรารี debug
debug.getupvalue(fn, 1) ส่งคืนอะไร
สรุป: ไลบรารี debug โดยละเอียด
ไลบรารี debug มีความสามารถในการตรวจสอบสแตกด้วย getinfo การตรวจสอบและแก้ไขตัวแปรเฉพาะที่ด้วย getlocal/setlocal การเข้าถึงอัปแวลูด้วย getupvalue/setupvalue และการติดตามโดยใช้ฮุกด้วย sethook ควรใช้อย่างรับผิดชอบและใช้เฉพาะระหว่างการพัฒนา
คำถามที่พบบ่อย
บทเรียน “ไลบรารี debug เชิงลึก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ไลบรารี debug เชิงลึก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ไลบรารี debug เชิงลึก”
ใช้ debug.traceback, getinfo, getlocal และ getupvalue เพื่อตรวจสอบภายใน คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ไลบรารี debug เชิงลึก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ไลบรารี debug เชิงลึก
- การดีบักระยะไกลด้วย MobDebug
- การสร้างโพรไฟล์ด้วย LuaProfiler
- ความครอบคลุมโค้ดและการตรวจวัดการทดสอบ