Latest web development tutorials

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:

sethook ([benang,] hook, masker [, count]):
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.
baris input string yang berisi hanya cont akan berakhir fungsi ini, sehingga pemanggil dapat terus lari ke bawah.

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.
Dalam '(' (tanda kurung buka) mewakili nama variabel dimulai dengan tidak ada nama variabel (kecuali untuk debug informasi blok kode).

10. 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:

  • ' c ': Setiap kali Lua memanggil fungsi, memanggil hook;
  • ' r ': setiap kali Lua kembali dari fungsi dipanggil saat hook;
  • ' l ': setiap kali Lua memasuki baris baru, sebut hook.
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.