Panduan调试 bagi Pemula

Hai sana, bakat pemrogram Lua masa depan! Hari ini, kita akan menjelajahi keterampilan penting dalam pemrograman: pengawasan (debugging). Jangan khawatir jika Anda belum pernah menulis baris kode sebelumnya - saya akan mengarahkan Anda secara langkah demi langkah, sama seperti yang saya lakukan untuk banyak murid selama tahun-tahun mengajar saya. Ayo masuk ke dalam!

Lua - Debugging

Apa Itu Debugging?

Sebelum kita masuk ke dalam hal-hal kecil, mari kita memahami apa yang sebenarnya berarti pengawasan. Bayangkan Anda sedang memanggang kue, dan ternyata tidak sesuai yang Anda harapkan. apa yang Anda lakukan? Anda kembali melalui resep, memeriksa setiap langkah untuk melihat di mana Anda mungkin salah. Itu sebenarnya apa yang pengawasan dalam pemrograman - mencari dan memperbaiki kesalahan dalam kode Anda.

Contoh Debugging

Ayo mulai dengan contoh sederhana. Misal kita punya kode Lua ini:

local function greet(name)
print("Hello, " .. name .. "!")
end

greet("Alice")
greet("Bob")
greet(123)

Kode ini tampak baik pada pandangan pertama, tetapi mari kita jalankan dan lihat apa yang terjadi:

Hello, Alice!
Hello, Bob!
Error: attempt to concatenate a number value

Ups! Kita mendapat kesalahan. Ini tempat pengawasan sangat membantu. Mari kitauraikan ini:

  1. Dua panggilan pertama ke greet() berjalan lancar.
  2. Panggilan ketiga, greet(123), menyebabkan kesalahan.

Pesan kesalahan mengatakan bahwa kita mencoba menggabungkan nilai angka, yang tidak diijinkan di Lua. Bisa Anda melihat masalahnya? Ya benar - kita mengirimkan angka (123) bukannya string ke fungsi greet().

Cara Memperbaiki

Untuk memperbaiki ini, kita perlu mengkonversi angka menjadi string. Ini adalah kode yang diperbaiki:

local function greet(name)
print("Hello, " .. tostring(name) .. "!")
end

greet("Alice")
greet("Bob")
greet(123)

Sekarang, ketika kita menjalankan kode ini, kita mendapat:

Hello, Alice!
Hello, Bob!
Hello, 123!

Perfait! Tidak ada kesalahan lagi. Ini adalah contoh sederhana pengawasan dalam aksi.

Jenis Debugging

Sekarang kita sudah melihat pengawasan dalam praktek, mari kita jelajahi teknik pengawasan yang berbeda. Bayangkan ini sebagai peralatan berbeda dalam kotak peralatan pemrograman Anda - setiap jenis cocok untuk situasi berbeda.

1. Pengawasan Cetak

Ini adalah bentuk pengawasan paling sederhana, dan itu yang kita lakukan dalam contoh kita. Anda menambahkan pernyataan cetak ke kode Anda untuk melihat apa yang terjadi di berbagai titik. Itu seperti meninggalkan jejak roti saat Anda berjalan melalui hutan.

Contoh:

local function calculateArea(length, width)
print("Calculating area with length: " .. length .. " and width: " .. width)
local area = length * width
print("Calculated area: " .. area)
return area
end

local result = calculateArea(5, 3)
print("Final result: " .. result)

Ketika Anda menjalankan ini, Anda akan melihat:

Calculating area with length: 5 and width: 3
Calculated area: 15
Final result: 15

Pernyataan cetak ini membantu Anda memahami apa yang terjadi di setiap langkah program Anda.

2. Pengawasan Interaktif

Banyak lingkungan pengembangan menyediakan pengawasan interaktif, di mana Anda dapat menhentikan eksekusi program dan memeriksa keadaannya. Meskipun Lua sendiri tidak memiliki debugger bawaan, beberapa IDE dan alat menyediakan fungsi ini.

3. Logging

Logging mirip dengan pengawasan cetak, tetapi lebih canggih. Daripada mencetak ke konsol, Anda menulis informasi ke file log. Ini sangat berguna untuk program yang besar atau saat pengawasan masalah yang hanya terjadi di lingkungan tertentu.

Ini adalah fungsi logging sederhana di Lua:

local function log(message)
local file = io.open("debug.log", "a")
file:write(os.date() .. ": " .. message .. "\n")
file:close()
end

log("Starting the program")
-- Your code here
log("Ending the program")

Ini akan membuat (atau menambahkan ke) file "debug.log" dengan pesan yang diberi tanda waktu.

4. Pernyataan Assert

Pernyataan assert adalah cara untuk memeriksa apakah suatu kondisi benar, dan jika tidak, menghentikan program dengan pesan kesalahan. Itu sangat baik untuk menangkap situasi yang tidak diharapkan.

Contoh:

local function divide(a, b)
assert(b ~= 0, "Cannot divide by zero!")
return a / b
end

print(divide(10, 2))  -- This works fine
print(divide(10, 0))  -- This will trigger an assert error

Ketika Anda menjalankan ini, Anda akan melihat:

5
Error: assertion failed: Cannot divide by zero!

Tabel Metode Pengawasan

Ini adalah ringkasan metode pengawasan yang kita diskusikan:

Metode Deskripsi Kapan digunakan
Pengawasan Cetak Menambahkan pernyataan cetak ke kode Anda Pengawasan cepat dan mudah untuk program kecil
Pengawasan Interaktif Menggunakan IDE untuk menhentikan dan melangkah melalui kode Masalah kompleks di program besar
Logging Menulis informasi debug ke file Program yang lama berjalan atau aplikasi server
Pernyataan Assert Memeriksa kondisi dan menghentikan jika mereka tidak terpenuhi Menangkap situasi yang tidak diharapkan awal

Ingat, pengawasan adalah seni dan ilmu. Itu memerlukan latihan untuk menjadi baik, tetapi jangan frustasi! Setiap pemrogram, bahkan yang paling berpengalaman, menghabiskan banyak waktu untuk pengawasan.

Saat Anda terus melanjutkan perjalanan Lua Anda, Anda akan menemui bug yang lebih kompleks dan belajar teknik pengawasan yang lebih canggih. Tetapi untuk sekarang, dasar-dasar ini akan membantu Anda. Selamat coding, dan semoga bug Anda sedikit dan jauh!

Credits: Image by storyset