Penyahpepijatan Lua (Nyahpepijat)
Lua menyediakan perpustakaan nyahpepijat untuk menyediakan fungsi mencipta gabenor tersuai kami. Lua sendiri tidak mempunyai gabenor terbina dalam, tetapi ramai pembangun telah berkongsi kod gabenor Lua mereka.
Pustaka nyahpepijat dalam Lua mengandungi fungsi berikut:
sethook ([benang,] cangkuk, topeng [, kiraan]):Nombor siri | Kaedah & Tujuan |
---|---|
1. | debug(): Masukkan interaksi pengguna mod dan jalankan Setiap rentetan yang dimasukkan oleh pengguna. Menggunakan arahan mudah dan tetapan penyahpepijatan lain, pengguna boleh memeriksa pembolehubah global dan tempatan, menukar nilai pembolehubah, menilai beberapa ungkapan dan banyak lagi. |
2. | getfenv(objek): Mengembalikan pembolehubah persekitaran objek. |
3. | gethook(benang pilihan): Mengembalikan tiga nilai yang mewakili tetapan cangkuk benang: Cangkuk semasa Fungsi, topeng cangkuk semasa, kiraan cangkuk semasa |
4. | getinfo ([benang,] f [, apa]): Mengembalikan jadual maklumat tentang fungsi. Anda boleh menyediakan fungsi secara langsung, atau anda boleh menggunakan nombor f untuk mewakili fungsi tersebut. Nombor f mewakili fungsi yang berjalan pada tahap yang sepadan bagi timbunan panggilan bagi utas yang ditentukan: Tahap 0 mewakili fungsi semasa (getinfo itu sendiri); ia tidak dikira pada timbunan); Jika f ialah nombor yang lebih besar daripada bilangan fungsi aktif, getinfo mengembalikan sifar. |
5. | debug.getlocal ([thread,] f, local): Fungsi ini kembali pada tindanan Indeks fungsi pada tahap f ialah nama dan nilai tempatan pembolehubah tempatan. Fungsi ini bukan sahaja digunakan untuk mengakses pembolehubah tempatan yang ditakrifkan secara eksplisit, tetapi juga termasuk parameter formal, pembolehubah sementara, dsb. |
6. | getmetatable(value): Tolak metatable bagi nilai yang ditunjukkan oleh indeks yang diberikan ke timbunan itu. Jika indeks tidak sah, atau tiada metatable untuk nilai, fungsi mengembalikan 0 dan tidak menolak apa-apa ke tindanan. |
7. | getregistry(): Mengembalikan jadual pendaftaran, yang merupakan jadual yang telah ditetapkan untuk menyimpan sebarang nilai Lua yang ingin disimpan oleh kod C. |
8. | nilai perolehan (f, atas) Fungsi ini mengembalikan nilai atas ke atas bagi fungsi f nama dan nilai. Jika fungsi tidak mempunyai nilai atas itu, nil dikembalikan. |
10. | Masukkan fungsi sebagai fungsi cangkuk. Topeng rentetan dan kiraan nombor menentukan bila cangkuk itu dipanggil >
| setlocal ([benang,] tahap, setempat, nilai):
12. | setmetatable (nilai, jadual):|
13. | nilai persediaan (f, atas, nilai):|
14. | surih balik ([benang,] [mesej [, tahap]]):|
Jadual di atas menyenaraikan fungsi penyahpepijatan yang biasa kita gunakan Seterusnya kita boleh melihat beberapa contoh mudah: function myfunction () print(debug.traceback("Stack trace")) print(debug.getinfo(1)) print("Stack trace end") return 10 end myfunction () print(debug.getinfo(1)) | Laksanakan output kod di atas. hasilnya ialah:
Contoh lain
Kami selalunya perlu menyahpepijat pembolehubah setempat dalam fungsi. Kita boleh menggunakan fungsi getupvalue untuk menetapkan pembolehubah tempatan ini. Contohnya adalah seperti berikut:
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())
Hasil keluaran melaksanakan kod di atas ialah:
1 2 index 1 k = 1 index 2 n = 2 11
Dalam contoh di atas, pembilang akan meningkat sebanyak 1 setiap kali ia dipanggil. Dalam contoh, kami menggunakan fungsi getupvalue untuk melihat status semasa pembolehubah tempatan. Kita boleh menetapkan pembolehubah tempatan kepada nilai baharu. Dalam contoh, nilai n sebelum tetapan ialah 2, dan fungsi nilai persediaan digunakan untuk menetapkannya kepada 10. Sekarang kita memanggil fungsi dan output selepas pelaksanaan ialah 11 dan bukannya 3.
Jenis nyahpepijatPenyahpepijatan baris perintah- Penyahpepijatan antara muka grafik
- Penyahpepijat baris perintah termasuk: RemDebug, clidebugger, ctrace, xdbLua, LuaInterface - Debugger, Rldb, ModDebug.
Penyahpepijat dalam dunia grafik termasuk: SciTE, Decoda, ZeroBrane Studio, akdebugger dan luaedit.