Lua แก้จุดบกพร่อง (Debug)
Lua ให้ห้องสมุดสำหรับการแก้ปัญหาให้เราสร้างฟังก์ชั่นแปลงที่กำหนดเอง Lua ตัวเองไม่ได้มีการสร้างขึ้นในราชการ แต่นักพัฒนาจำนวนมากร่วมกันว่าราชการรหัสของพวกเขา Lua
Lua ในห้องสมุดการแก้ปัญหารวมถึงฟังก์ชั่นดังต่อไปนี้:
เลขที่ | วิธีการและวัตถุประสงค์ |
---|---|
1 | การแก้ปัญหา (): ป้อนโหมดโต้ตอบผู้ใช้เรียกใช้แต่ละสายป้อนโดยผู้ใช้ การใช้คำสั่งง่ายๆและการตั้งค่าการแก้ปัญหาอื่น ๆ ผู้ใช้สามารถตรวจสอบตัวแปรระดับโลกและระดับท้องถิ่นเปลี่ยนค่าของตัวแปรในการคำนวณจำนวนของการแสดงออกและอื่น ๆ |
2 | getfenv (Object): ผลตอบแทนวัตถุตัวแปรสภาพแวดล้อม |
3 | gethook (ด้ายตัวเลือก): ผลตอบแทนที่เป็นตัวแทนของสามชุดเบ็ดกระทู้: ฟังก์ชั่นในปัจจุบันตะขอเบ็ดหน้ากากปัจจุบันและนับเบ็ดปัจจุบัน |
4 | getinfo ([ด้าย] F [ สิ่ง]): ข้อมูลเกี่ยวกับฟังก์ชั่นส่งกลับตาราง คุณสามารถให้ฟังก์ชั่นนี้คุณยังสามารถใช้เป็นตัวแทนดิจิตอลของฟังก์ชัน f ฟังก์ชั่นดิจิตอล F แสดงให้เห็นถึงการทำงานในหัวข้อที่ระบุเรียกกองสอดคล้องกับระดับ: ระดับ 0 แสดงฟังก์ชั่นปัจจุบัน (getinfo ตัวเอง); 1 ชั้นแสดงให้เห็นว่าฟังก์ชั่นการโทร getinfo (ยกเว้นว่าจะเป็นจุดสิ้นสุดของการโทรสถานการณ์เช่นนี้ไม่ได้รวมอยู่ในกอง); ฯลฯ . ถ้า F เป็นหน้าที่ของจำนวนกิจกรรมกว่าจำนวนขนาดใหญ่ getinfo ผลตอบแทนที่ศูนย์ |
5 | debug.getlocal ([ด้าย] F, ท้องถิ่น): ฟังก์ชั่นนี้จะส่งกลับชื่อและความคุ้มค่าของดัชนีของ F ชั้นฟังก์ชั่นที่กองสำหรับตัวแปรท้องถิ่นท้องถิ่น ฟังก์ชั่นนี้จะใช้เฉพาะในการเข้าถึงตัวแปรท้องถิ่นที่กำหนดไว้อย่างชัดเจนรวมทั้งพารามิเตอร์ตัวแปรชั่วคราว |
6 | getmetatable (บาท): ที่กำหนดจุดดัชนีค่าองค์ประกอบตารางลงบนสแต็ค หากดัชนีไม่ถูกต้องหรือมูลค่าของเงินหยวนเป็นตารางไม่มีฟังก์ชั่นกลับ 0 และไม่ผลักดันอะไรที่จะสแต็ค |
7 | :: getRegistry (): ตารางรีจิสทรีกลับซึ่งจะออกจากตารางที่กำหนดไว้ล่วงหน้าสามารถใช้ในการบันทึกรหัส C ใด ๆ ที่คุณต้องการที่จะประหยัดค่า Lua |
8 | getupvalue (F เพิ่มขึ้น) ฟังก์ชั่นนี้จะส่งกลับชื่อและค่าของฟังก์ชั่น F คนแรกที่ขึ้นอยู่กับค่า ถ้ามันไม่ได้เกี่ยวกับค่าที่จะส่งกลับศูนย์ |
10 | sethook ([ด้าย] Hook, หน้ากาก [นับ]): มันจะทำงานเป็นตะขอตั้งใน หน้ากากสตริงและนับดิจิตอลกำหนดเบ็ดจะถูกเรียกเมื่อ หน้ากากคือการรวมกันของตัวละครต่อไปนี้เป็นสตริงอักขระแต่ละตัวมีความหมายของมันเอง
|
11 | setlocal ([ด้าย] ระดับ ท้องถิ่นค่า): ฟังก์ชั่นนี้จะเป็นค่าท้องถิ่นครั้งแรกที่ได้รับมอบหมายให้กองแรกที่ฟังก์ชั่นชั้นระดับตัวแปรท้องถิ่น หากคุณไม่ได้มีตัวแปรที่ฟังก์ชันจะส่งกลับศูนย์ ถ้าระดับข้ามพรมแดนโยนความผิดพลาด |
12 | setmetatable (ค่าตาราง): ค่าของตารางองค์ประกอบชุด (สามารถไม่มี) ค่าตอบแทน |
13 | setupvalue (F, ขึ้น, ค่า) : ฟังก์ชั่นนี้เป็นครั้งแรกจะตั้งค่ากับค่าของฟังก์ชั่นฉ หากคุณไม่ได้มีฟังก์ชั่นที่เกี่ยวกับค่าก็จะส่งกลับศูนย์มิฉะนั้นจะส่งกลับชื่อของค่าก่อนหน้านี้ |
14 | traceback ([ด้าย] [ข้อความ [ระดับ]]): ถ้าคุณมีข้อความและไม่สตริงหรือไม่มีฟังก์ชั่นโดยไม่ต้องรักษาใด ๆ ข้อความกลับโดยตรง มิฉะนั้นก็จะส่งกลับสแต็คโทรข้อมูลสแต็คที่ติดตาม สตริงข้อความเพิ่มเติมจะมีการเพิ่มจุดเริ่มต้นของข้อมูลการกอง traceback ที่ ดิจิตอลตัวเลือกระดับที่กำหนดไว้จากการที่ชั้นสแต็คเริ่มย้อนรอย (ค่าปกติคือ 1 ซึ่งเรียกที่ traceback ของ) |
ตารางเป็นฟังก์ชั่นการแก้จุดบกพร่องของเราร่วมกันแล้วเราสามารถดูตัวอย่างง่ายๆ:
function myfunction () print(debug.traceback("Stack trace")) print(debug.getinfo(1)) print("Stack trace end") return 10 end myfunction () print(debug.getinfo(1))
ดำเนินการออกผลโค้ดข้างต้น:
Stack trace stack traceback: test2.lua:2: in function 'myfunction' test2.lua:8: in main chunk [C]: ? table: 0054C6C8 Stack trace end
ในตัวอย่างที่เราใช้ traceback และ getinfo การแก้ปัญหาการทำงานห้องสมุดฟังก์ชัน getinfo ส่งกลับข้อมูลฟังก์ชันตาราง
อีกตัวอย่างหนึ่ง
เรามักจะต้องแก้ปัญหาตัวแปรท้องถิ่นภายในฟังก์ชั่น เราสามารถใช้ฟังก์ชั่น getupvalue การตั้งค่าตัวแปรท้องถิ่นเหล่านี้ ตัวอย่างมีดังนี้
function newCounter () local n = 0 local k = 0 return function () k = n n = n + 1 return n end end counter = newCounter () print(counter()) print(counter()) local i = 1 repeat name, val = debug.getupvalue(counter, i) if name then print ("index", i, name, "=", val) if(name == "n") then debug.setupvalue (counter,2,10) end i = i + 1 end -- if until not name print(counter())
ดำเนินการออกผลโค้ดข้างต้น:
1 2 index 1 k = 1 index 2 n = 2 11
ในตัวอย่างข้างต้น, เคาน์เตอร์จะเพิ่มขึ้นทุกครั้งที่โทรออก 1 ตัวอย่างที่เราใช้ฟังก์ชั่น getupvalue เพื่อดูสถานะปัจจุบันของตัวแปรท้องถิ่น เราสามารถตั้งค่าตัวแปรท้องถิ่นให้เป็นค่าใหม่ ตัวอย่างเช่นก่อนที่จะตั้ง n เป็น 2 ใช้ฟังก์ชัน setupvalue ตั้งค่าให้ 10 ตอนนี้เราเรียกใช้ฟังก์ชันหลังจากการดำเนินการของการส่งออกเป็น 11 แทน 3
ประเภทการแก้จุดบกพร่อง
- ดีบักบรรทัดคำสั่ง
- กราฟิกดีบัก
บรรทัดคำสั่งดีบักมี: RemDebug, clidebugger, ctrace, xdbLua, LuaInterface - ดีบัก Rldb, ModDebug
ดีบักอินเตอร์เฟซแบบกราฟิกที่มี: SciTE, Decoda, ZeroBrane สตูดิโอ, akdebugger, luaedit