Lua debugging (Debug)
Lua memberikan perpustakaan debug untuk menyediakan kami membuat fungsi converter kustom. Lua itu sendiri tidak memiliki built-in gubernur, namun banyak pengembang berbagi gubernur kode Lua mereka.
Lua di perpustakaan men-debug meliputi fungsi-fungsi sebagai berikut:
Tidak. | Metode & Tujuan |
---|---|
1. | debug (): Masukkan modus interaktif pengguna, menjalankan setiap string yang dimasukkan oleh pengguna. Menggunakan perintah-perintah sederhana dan pengaturan men-debug lainnya, pengguna dapat meninjau variabel global dan lokal, mengubah nilai-nilai variabel untuk menghitung jumlah ekspresi, dan sebagainya. |
2. | getfenv (objek): Pengembalian keberatan variabel lingkungan. |
3. | gethook (benang opsional): Pengembalian mewakili tiga benang kait set: fungsi saat hook, hook topeng saat ini, dan jumlah kail saat |
4. | getinfo ([benang,] f [ , apa]): Informasi tentang fungsi mengembalikan meja. Anda dapat memberikan fungsi ini, Anda juga dapat menggunakan representasi digital dari fungsi f. fungsi Digital f mewakili berjalan pada thread yang ditentukan stack panggilan sesuai dengan tingkat: tingkat 0 menunjukkan fungsi saat ini (getinfo sendiri); 1 lapisan menunjukkan bahwa fungsi panggilan getinfo (kecuali itu adalah akhir dari panggilan, situasi ini tidak termasuk dalam stack); dll . Jika f adalah fungsi dari jumlah kegiatan dari jumlah yang lebih besar, getinfo kembali nil. |
5. | debug.getlocal ([benang,] f, lokal): Fungsi ini mengembalikan nama dan nilai indeks dari fungsi f lapisan stack untuk variabel lokal setempat. Fungsi ini hanya digunakan untuk mengakses variabel lokal didefinisikan secara eksplisit, termasuk parameter, variabel sementara. |
6. | getmetatable (value): Indeks poin yang diberikan kepada nilai-nilai elemen tabel ke stack. Jika indeks tidak valid, atau nilai yuan tidak ada meja, fungsi mengembalikan 0 dan tidak mendorong apa pun untuk stack. |
7. | getregistry (): meja registri kembali, yang keluar dari meja yang telah ditetapkan dapat digunakan untuk menyimpan kode C Anda ingin menyimpan nilai Lua. |
8. | getupvalue (f, up) Fungsi ini mengembalikan nama dan nilai-nilai dari fungsi f yang pertama di atas nilai-nilai. Jika tidak pada nilai tersebut, ia mengembalikan nil. |
10. | sethook ([benang,] hook, masker [, count]): Ini akan berfungsi sebagai kail set ke. String masker dan jumlah digital menentukan hook akan dipanggil saat. topeng adalah kombinasi dari karakter berikut ke dalam string, masing-masing karakter memiliki arti tersendiri:
|
11. | setlocal ([benang,] tingkat, lokal, nilai): Fungsi ini akan menjadi nilai lokal pertama ditugaskan untuk pertama tumpukan lokal fungsi lapisan tingkat variabel. Jika Anda tidak memiliki variabel itu, fungsi mengembalikan nil. Jika tingkat lintas batas, melempar kesalahan. |
12. | setmetatable (nilai, tabel): Nilai dari meja meja elemen set (bisa nihil). nilai kembali. |
13. | setupvalue (f, up, nilai) : Fungsi ini pertama akan mengatur nilai pada nilai fungsi f. Jika Anda tidak memiliki fungsi yang di nilai, ia mengembalikan nil jika tidak, ia mengembalikan nama nilai-nilai sebelumnya. |
14. | traceback ([benang,] [pesan [, tingkat]]): Jika Anda memiliki pesan, dan bukan string atau nihil, fungsi tanpa pengobatan langsung kembali pesan. Jika tidak, ia mengembalikan panggilan tumpukan informasi tumpukan traceback. Pesan tali opsional ditambahkan pada awal informasi tumpukan traceback. Pilihan digital tingkat tertentu yang lapisan tumpukan mulai mundur (default adalah 1, yang menyebut di mana traceback dari). |
tabel adalah fungsi debugging kita bersama, maka kita dapat melihat beberapa contoh sederhana:
function myfunction () print(debug.traceback("Stack trace")) print(debug.getinfo(1)) print("Stack trace end") return 10 end myfunction () print(debug.getinfo(1))
Mengeksekusi hasil kode output di atas:
Stack trace stack traceback: test2.lua:2: in function 'myfunction' test2.lua:8: in main chunk [C]: ? table: 0054C6C8 Stack trace end
Dalam contoh ini, kita menggunakan traceback dan getinfo fungsi perpustakaan debug, fungsi getinfo mengembalikan informasi tabel fungsi.
contoh lain
Kita sering perlu untuk debug variabel lokal dalam fungsi. Kita dapat menggunakan fungsi getupvalue untuk mengatur variabel-variabel lokal. Contohnya adalah sebagai 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())
Mengeksekusi hasil kode output di atas:
1 2 index 1 k = 1 index 2 n = 2 11
Dalam contoh di atas, counter akan bertambah setiap kali panggilan 1. Contoh kami menggunakan fungsi getupvalue untuk melihat status variabel lokal. Kita dapat mengatur variabel lokal untuk nilai baru. Misalnya, sebelum menetapkan n adalah 2, menggunakan fungsi setupvalue set ke 10. Sekarang kita memanggil fungsi setelah pelaksanaan output adalah 11 bukan 3.
debugging Jenis
- Command-line debugger
- debugger grafis
Command-line debugger memiliki: RemDebug, clidebugger, ctrace, xdbLua, LuaInterface - Debugger, Rldb, ModDebug.
Grafis antarmuka debugger memiliki: SciTE, Decoda, ZeroBrane Studio, akdebugger, luaedit.