2009-04-23 39 views
27

Làm cách nào để gỡ lỗi mã lua được nhúng trong ứng dụng C++?Gỡ lỗi nhúng Lua

Từ những gì tôi thu thập được, tôi cần phải mua một IDE đặc biệt và liên kết trong thời gian chạy lua đặc biệt của họ (ugh). Hoặc tôi cần xây dựng bảng điều khiển gỡ lỗi trong công cụ trò chơi, sử dụng các cuộc gọi lua debug API.

Tôi đang hướng tới viết bảng điều khiển gỡ lỗi của riêng mình, nhưng có vẻ như rất nhiều công việc. Thời gian mà tôi có thể chi tiêu tốt hơn để đánh bóng các phần khác của trò chơi.

Trả lời

10

Có một số công cụ nổi xung quanh có thể thực hiện ít nhất một phần của những gì bạn muốn. Tôi đã thấy tài liệu tham khảo cho một plugin VS, có một phần mở rộng trình gỡ lỗi SciTE trong Lua cho Windows, và có một dự án của Kepler là RemDebug, cũng như LuaEclipse của dự án Kepler.

RemDebug có thể đang theo dõi những gì bạn cần, vì nó được xây dựng để cho phép gỡ lỗi các tập lệnh CGI được viết bằng Lua. Nó yêu cầu quyền truy cập vào mô-đun LuaSocket để cung cấp một kênh truyền thông giữa kịch bản đích và bộ điều khiển cũng như một vài mô-đun khác.

Sự cố lớn hơn có thể là khả năng tải các mô-đun tùy ý từ bên trong bất kỳ hộp cát nào mà công cụ trò chơi đã đặt xung quanh tập lệnh của bạn. Nếu bạn có một số kiểm soát đối với động cơ, thì đó sẽ không phải là một vấn đề lớn.

Hiện tại, điều này hiện không khả thi cho nhà phát triển plugin Adobe Lightroom, vì Lightroom không để lộ require bên trong hộp cát của plugin.

Điều ngạc nhiên đối với tôi là hiếm khi tôi cảm thấy cần một trình gỡ rối khi làm việc với Lua. Tôi đã xây dựng một số ứng dụng nhỏ trong đó cho các dự án khác nhau và đã ngạc nhiên khi thấy sự kết hợp hoàn hảo của stack backtraces và thỉnh thoảng một cuộc gọi print hoạt động để xác định lỗi mà require "strict" không ngăn chặn ngay từ đầu.

+0

RemDebugger gần như chính xác những gì tôi đang tìm kiếm. Nó có thể sử dụng được, và cho tôi một cơ sở tốt để tùy chỉnh. –

0

Nếu bạn đang sử dụng cửa sổ và VS - Bạn có thể sử dụng mẹo mà chúng tôi sử dụng không?

Sao chép mã lua trong một tệp. Sau đó, trong mã lua thực hiện một cuộc gọi đến Debugger api (trong C++ đây là DebuggerBreak() Tôi nghĩ rằng - xem here). sau đó khi mã lua thực hiện trình gỡ lỗi sẽ kích hoạt và bạn sẽ có thể chỉ định tệp. Sau đó gỡ lỗi như bình thường?

+1

Điều đó giải quyết được một nửa vấn đề. Những gì tôi thực sự muốn làm là thực hiện dòng mã lua theo dòng. Nếu hiểu được giải pháp của bạn, tôi sẽ có thể phá vỡ bất kỳ dòng nào trong kịch bản lệnh lua, nhưng tôi sẽ ở trong trình gỡ lỗi C++. Làm thế nào tôi sẽ kiểm tra biến lua địa phương và như vậy. –

+0

Tôi thấy điều này như là một vấn đề trong hai phần - một là dễ dàng kiểm tra mà sẽ khó khăn như bạn muốn được viết phần mở rộng trình gỡ lỗi để làm điều này. Cách thứ hai sẽ được xác định như thế nào lua 'động cơ' lưu trữ các giá trị này và kiểm tra chúng bằng tay hoặc thông qua vĩ mô có lẽ. –

2

Tôi không thấy cách gọi DebuggerBreak sẽ hoạt động, vì đó là .NET cụ thể. Tôi sẽ giả định rằng chỉ làm việc với Lua phân chia nhắm mục tiêu CLR.

Nếu bạn đang sử dụng Lua chuẩn, bạn có một số cơ sở gỡ lỗi rudementary thông qua lệnh gọi hàm debug.debug(). Điều đó sẽ ném Lua vào giao diện điều khiển của bạn, vì vậy nếu bạn đang chạy lua từ một giao diện điều khiển, bạn sẽ có thể ra lệnh lua tương tác để kiểm tra trạng thái hiện tại của bạn. debug.debug() sẽ không đưa bạn vào khung stack hiện tại, vì vậy bạn phải sử dụng debug.getlocal() để đọc các giá trị của các biến của bạn.

Tôi chưa thử bản thân mình, nhưng tôi thực sự không nghĩ rằng làm cho bảng điều khiển gỡ lỗi khả thi của riêng bạn là nhiều công việc. Hãy nhớ Lua không phải là ngôn ngữ phức tạp như C++, do đó, làm điều này là dễ dàng hơn nhiều so với việc thực hiện một trình gỡ lỗi C++ thực như nói gdb.

Tôi nghĩ rằng có rất nhiều người đã thực hiện những việc tương tự, mã whos bạn có thể xem. Here là trình gỡ lỗi CLI được viết chỉ bằng lua. Chỉ một tệp lua. Không nên sử dụng khó khăn và sửa đổi cho nhu cầu của bạn.

6

Làm thế nào về Decoda ?? có một video giải thích cách sử dụng nó, và nó hoạt động khá darn tốt cho nguồn lua nhúng. (tôi la một khách hàng hài lòng). và nó khá rẻ.

+0

Tôi sử dụng Decoda và tôi cũng rất hài lòng với nó. Nó liên kết liền mạch với dự án của bạn và không yêu cầu bất kỳ thiết lập nào. Bạn thậm chí có thể gỡ lỗi Lua với Decoda và C++ bằng một trình gỡ lỗi khác cùng một lúc. Khiếu nại duy nhất của tôi là các nhà phát triển (Unknown Worlds) có một dự án ưu tiên cao hơn nhiều trên tay của họ (Natural Selection 2), vì vậy yêu cầu hỗ trợ của tôi đã không được trả lời. (Hóa ra vấn đề của tôi không phải lỗi của Decoda). Ngoài ra, danh sách dự án không hỗ trợ chế độ xem dạng cây, vì vậy khi bạn nhận được nhiều tệp, nó có thể biến thành một danh sách dài. – Raptormeat

2

Bạn có thể sử dụng trình gỡ lỗi của mình: GRLD (trình gỡ rối lua từ xa đồ họa). Giống như RemDebug nó sử dụng một kết nối socket, nhưng không giống như RemDebug nó có một giao diện đồ họa đẹp. Mã nguồn được cung cấp, vì vậy bạn có thể làm cho nó hoạt động trên bất kỳ nền tảng nào. Nó hoạt động với thời gian chạy lua tiêu chuẩn. Miễn phí cho mục đích phi thương mại.

EDIT: xin lỗi, tôi phải đóng trang web, vì vậy phần mềm không có sẵn để tải xuống nữa. Tôi có thể phát hành nó dưới dạng phần mềm mã nguồn mở sau này, nếu tôi tìm thấy thời gian.

EDIT 2: liên kết được cập nhật, bây giờ tổ chức trong github theo giấy phép MIT (mã nguồn mở)

2

Bạn không cần phải viết console của riêng bạn như bạn có thể muốn bắt đầu với một trong những cái hiện có. RemDebug đã được đề xuất; Tôi đã phát triển MobDebug, một trình gỡ lỗi dựa trên RemDebug, nhưng với một loạt các tính năng mới và sửa lỗi. Danh sách chi tiết về các thay đổi nằm trong số README.

Bật gỡ lỗi trong tập lệnh có thể đơn giản như thêm require('mobdebug').start() (nếu bạn đang chạy ứng dụng và máy chủ trình gỡ lỗi trên cùng một máy). Điều này sẽ cố gắng kết nối với trình gỡ lỗi nghe trên một cổng mặc định trên localhost. Bạn có thể sử dụng một giao diện dòng lệnh có trong MobDebug, hoặc bạn có thể sử dụng một ZeroBrane Studio, là một IDE Lua tích hợp với MobDebug để cung cấp khả năng gỡ lỗi. IDE hỗ trợ gỡ lỗi cho Love2d, Moai và các công cụ Lua khác và cũng có thể hoạt động tốt cho thiết lập của bạn.