Bài 19 : Gỡ lỗi

Bài 19 : Gỡ lỗi

Lua – Gỡ lỗi  Trang trướcTrang tiếp theo   Lua cung cấp một thư viện gỡ lỗi, cung cấp tất cả […]

Learn more »

Lua – Gỡ lỗi


 Trang trướcTrang tiếp theo  

Lua cung cấp một thư viện gỡ lỗi, cung cấp tất cả các chức năng nguyên thủy để chúng ta tạo trình gỡ lỗi của riêng mình. Mặc dù không có trình gỡ lỗi Lua tích hợp sẵn, chúng tôi có nhiều trình gỡ lỗi dành cho Lua, được tạo bởi nhiều nhà phát triển khác nhau với nhiều người là mã nguồn mở.

Các hàm có sẵn trong thư viện gỡ lỗi Lua được liệt kê trong bảng sau cùng với cách sử dụng của nó.

Sr.No.Phương pháp & Mục đích
1gỡ lỗi ()Vào chế độ tương tác để gỡ lỗi, chế độ này vẫn hoạt động cho đến khi chúng ta nhập chỉ cont trong một dòng và nhấn enter. Người dùng có thể kiểm tra các biến trong chế độ này bằng các chức năng khác.
2getfenv (đối tượng)Trả về môi trường của đối tượng.
3gethook (chủ đề tùy chọn)Trả về cài đặt móc hiện tại của luồng, dưới dạng ba giá trị – chức năng móc hiện tại, mặt nạ móc hiện tại và số móc hiện tại.
4getinfo (luồng tùy chọn, chức năng hoặc mức ngăn xếp, cờ tùy chọn)Trả về một bảng với thông tin về một hàm. Bạn có thể cung cấp hàm trực tiếp hoặc bạn có thể cung cấp một số làm giá trị của hàm, có nghĩa là hàm đang chạy ở hàm cấp của ngăn xếp cuộc gọi của luồng đã cho – cấp 0 là hàm hiện tại (chính là getinfo); mức 1 là chức năng được gọi là getinfo; và như thế. Nếu hàm là một số lớn hơn số hàm đang hoạt động, thì getinfo trả về nil.
5getlocal (luồng tùy chọn, mức ngăn xếp, chỉ mục cục bộ)Trả về tên và giá trị của biến cục bộ có chỉ mục cục bộ của hàm ở cấp độ ngăn xếp. Trả về giá trị nil nếu không có biến cục bộ nào với chỉ mục đã cho và phát sinh lỗi khi được gọi với cấp độ nằm ngoài phạm vi.
6có được (giá trị)Trả về khả năng gặp của đối tượng hoặc nil đã cho nếu đối tượng đó không có đối tượng có thể đo được.
7getregistry ()Trả về bảng đăng ký, một bảng được xác định trước có thể được sử dụng bởi bất kỳ mã C nào để lưu trữ bất kỳ giá trị Lua nào mà nó cần để lưu trữ.
số 8getupvalue (hàm, chỉ mục upvalue)Hàm này trả về tên và giá trị của giá trị tăng với chỉ mục của hàm func. Hàm trả về nil nếu không có giá trị tăng với chỉ số đã cho.
9setfenv (hàm hoặc luồng hoặc dữ liệu người dùng, bảng môi trường)Đặt môi trường của đối tượng đã cho vào bảng nhất định. Trả về đối tượng.
10sethook (chuỗi tùy chọn, hàm móc, chuỗi mặt nạ móc với “c” và / hoặc “r” và / hoặc “l”, số lệnh tùy chọn)Đặt hàm đã cho dưới dạng móc câu. Mặt nạ chuỗi và số đếm mô tả khi nào hook sẽ được gọi. Ở đây, c, r và l được gọi mỗi khi Lua gọi, trả về và nhập mọi dòng mã trong một hàm tương ứng.
11setlocal (luồng tùy chọn, mức ngăn xếp, chỉ mục cục bộ, giá trị)Gán giá trị cho biến cục bộ với chỉ mục cục bộ của hàm ở mức ngăn xếp. Hàm trả về nil nếu không có biến cục bộ với chỉ số đã cho và gây ra lỗi khi được gọi với mức nằm ngoài phạm vi. Nếu không, nó trả về tên của biến cục bộ.
12thiết lập được (giá trị, có thể đo được)Đặt đối tượng có thể đo được cho đối tượng đã cho vào bảng nhất định (có thể là nil).
13giá trị thiết lập (chức năng, chỉ số giá trị nâng cấp, giá trị)Hàm này gán giá trị cho giá trị tăng với chỉ mục của hàm func. Hàm trả về nil nếu không có giá trị tăng với chỉ số đã cho. Nếu không, nó trả về tên của giá trị tăng.
14theo dõi lại (chuỗi tùy chọn, chuỗi thông báo tùy chọn, đối số mức tùy chọn)Tạo một thông báo lỗi mở rộng với một truy nguyên.

Danh sách trên là danh sách đầy đủ các hàm gỡ lỗi trong Lua và chúng tôi thường sử dụng thư viện sử dụng các hàm trên và cung cấp việc gỡ lỗi dễ dàng hơn. Việc sử dụng các chức năng này và tạo trình gỡ lỗi của riêng chúng tôi khá phức tạp và không được ưa chuộng. Dù sao, chúng ta sẽ thấy một ví dụ về việc sử dụng đơn giản các hàm gỡ lỗi.Bản thử trực tiếp

function myfunction ()    print(debug.traceback("Stack trace"))    print(debug.getinfo(1))    print("Stack trace end")     return 10 end  myfunction () print(debug.getinfo(1))

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được dấu vết ngăn xếp như hình dưới đây.

Stack trace stack traceback: 	test2.lua:2: in function 'myfunction' 	test2.lua:8: in main chunk 	[C]: ? table: 0054C6C8 Stack trace end 

Trong chương trình mẫu trên, dấu vết ngăn xếp được in bằng cách sử dụng hàm debug.trace có sẵn trong thư viện gỡ lỗi. Debug.getinfo lấy bảng hiện tại của hàm.

Gỡ lỗi – Ví dụ

Chúng ta thường cần biết các biến cục bộ của một hàm để gỡ lỗi. Với mục đích đó, chúng ta có thể sử dụng getupvalue và để đặt các biến cục bộ này, chúng ta sử dụng setupvalue. Một ví dụ đơn giản cho điều này được hiển thị bên dưới.Bản thử trực tiếp

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())

Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau.

1 2 index	1	k	=	1 index	2	n	=	2 11 

Trong ví dụ này, bộ đếm cập nhật từng cái một khi nó được gọi. Chúng ta có thể thấy trạng thái hiện tại của biến cục bộ bằng cách sử dụng hàm getupvalue. Sau đó, chúng tôi đặt biến cục bộ thành một giá trị mới. Ở đây, n là 2 trước khi hoạt động tập hợp được gọi. Sử dụng hàm setupvalue, nó được cập nhật lên 10. Bây giờ khi chúng ta gọi hàm counter, nó sẽ trả về 11 thay vì 3.

Các loại gỡ lỗi

  • Gỡ lỗi dòng lệnh
  • Gỡ lỗi đồ họa

Gỡ lỗi dòng lệnh

Gỡ lỗi dòng lệnh là loại gỡ lỗi sử dụng dòng lệnh để gỡ lỗi với sự trợ giúp của các lệnh và câu lệnh in. Có rất nhiều trình gỡ lỗi dòng lệnh có sẵn cho Lua, trong đó có một số trình gỡ rối được liệt kê bên dưới.

  • RemDebug – RemDebug là một trình gỡ lỗi từ xa cho Lua 5.0 và 5.1. Nó cho phép bạn kiểm soát việc thực thi một chương trình Lua khác từ xa, thiết lập các điểm ngắt và kiểm tra trạng thái hiện tại của chương trình. RemDebug cũng có thể gỡ lỗi các tập lệnh CGILua.
  • clidebugger – Trình gỡ lỗi giao diện dòng lệnh đơn giản cho Lua 5.1 được viết bằng Lua thuần túy. Nó không phụ thuộc vào bất kỳ thứ gì khác ngoài các thư viện Lua 5.1 tiêu chuẩn. Nó được lấy cảm hứng từ RemDebug nhưng không có cơ sở vật chất từ ​​xa.
  • ctrace – Một công cụ để theo dõi các lệnh gọi Lua API.
  • xdbLua – Trình gỡ lỗi dòng lệnh Lua đơn giản cho nền tảng Windows.
  • LuaInterface – Trình gỡ lỗi – Dự án này là một phần mở rộng trình gỡ lỗi cho LuaInterface. Nó nâng giao diện gỡ lỗi Lua được tích hợp sẵn lên một cấp độ cao hơn. Tương tác với trình gỡ lỗi được thực hiện bởi các sự kiện và các cuộc gọi phương thức.
  • Rldb – Đây là trình gỡ lỗi Lua từ xa thông qua socket, khả dụng trên cả Windows và Linux. Nó có thể cung cấp cho bạn nhiều tính năng hơn bất kỳ tính năng nào hiện có.
  • ModDebug – Điều này cho phép kiểm soát việc thực thi một chương trình Lua khác từ xa, thiết lập các điểm ngắt và kiểm tra trạng thái hiện tại của chương trình.

Gỡ lỗi đồ họa

Gỡ lỗi đồ họa có sẵn với sự trợ giúp của IDE, nơi bạn được cung cấp gỡ lỗi trực quan về các trạng thái khác nhau như giá trị biến, dấu vết ngăn xếp và thông tin liên quan khác. Có một biểu diễn trực quan và kiểm soát từng bước việc thực thi với sự trợ giúp của các điểm ngắt, bước vào, bước qua và các nút khác trong IDE.

Có một số trình gỡ lỗi đồ họa cho Lua và nó bao gồm những điều sau đây.

  • SciTE – Windows IDE mặc định cho Lua cung cấp nhiều phương tiện gỡ lỗi như điểm ngắt, bước, bước vào, bước qua, xem các biến, v.v.
  • Decoda – Đây là một trình gỡ lỗi đồ họa với hỗ trợ gỡ lỗi từ xa.
  • ZeroBrane Studio – Lua IDE tích hợp trình gỡ lỗi từ xa, chế độ xem ngăn xếp, chế độ xem đồng hồ, bảng điều khiển từ xa, bộ phân tích tĩnh, v.v. Hoạt động với LuaJIT, Love2d, Moai và các động cơ Lua khác; Windows, OSX và Linux. Mã nguồn mở.
  • akdebugger – Trình gỡ lỗi và trình chỉnh sửa Lua plugin cho Eclipse.
  • luaedit – Tính năng này có tính năng gỡ lỗi từ xa, gỡ lỗi cục bộ, đánh dấu cú pháp, danh sách đề xuất hoàn thành, công cụ đề xuất tham số, quản lý điểm ngắt trước (bao gồm hệ thống điều kiện trên điểm ngắt và số lần truy cập), danh sách chức năng, danh sách biến toàn cục và cục bộ, đồng hồ, quản lý theo hướng giải pháp.


Lượt xem : 214

Integrations
Users

Share Profile

Anyone at KeenThemes can view
Anyone with link can edit

Give Award

Anyone at KeenThemes can view
Anyone with link can edit

Report User

Let us know why you’re reporing this person
Don't worry, your report is completely anonymous; the person you're
reporting will not be informed that you've submitted it