2011-12-07 34 views
11

Công ty của tôi có chương trình sử dụng Lua được nhúng trong thời gian chạy, tải lên các tệp .lua từ đĩa và các chức năng thực thi được xác định trong chúng nhiều lần.Trình gỡ lỗi Lua có thể đính kèm vào Quy trình

Có cách nào để đính kèm vào quy trình đang chạy và đặt điểm ngắt trong các tệp .lua của tôi không? (Tôi chấp nhận hoặc gỡ lỗi dòng lệnh kiểu gdb như một phần của bản phân phối Lua, hoặc có lẽ là một IDE của bên thứ ba cung cấp các điểm ngắt GUI giống như Visual-Studio.)

Hoặc là những gì tôi yêu cầu hoàn toàn vô nghĩa và không thể cho bản chất của thời gian chạy tải lên các tập tin ngẫu nhiên từ đĩa?

Sửa: Hình như nó không phải là vô nghĩa, cho rằng riêng debug.getinfo() chức năng Lua có thể xác định các tập tin nguồn cho một chức năng nhất định, và debug.sethook() cho phép gọi lại cho mỗi dòng mới của mã nhập vào. Vì vậy, nó là hợp lý để tải mã nguồn từ đĩa và có thể biết khi nào trình thông dịch đang thực thi một dòng mã cụ thể từ tệp đó. Câu hỏi vẫn còn là: làm cách nào để chốt một quá trình hiện tại có trình thông dịch Lua và chèn hàm theo dõi của riêng tôi (sau đó có thể xem các cặp số tệp/dòng và tạm dừng thực thi)?

Trả lời

4

Đây là phương án thay thế mà tôi sử dụng sau khi tìm kiếm nhiều. Nếu bạn có một tệp thực thi bên ngoài tải lua, tôi đã làm việc này sau vài phút. Các op là rất nhạy, nó có một trình gỡ lỗi tương tác tải mã của bạn, bạn có thể đặt các điểm gỡ lỗi tương tác. Nó không có một trình soạn thảo, nhưng tôi sử dụng trình soạn thảo scite hoặc crimson và bắt đầu thực thi, một dòng trong mô đun lua chính của bạn cho phép trình gỡ rối.

http://www.cushy-code.com/grld/ - liên kết này dường như chết ngay bây giờ

tôi đã chuyển đến eclipse.org/ldt nó có một ide và gỡ lỗi tích hợp, đề nghị

hth

+0

Tôi đã chuyển đến http://www.eclipse.org/koneki/ldt/ nó có trình gỡ lỗi ide và tích hợp, được đề xuất – daven11

+0

Liên kết ở trên đã chết. –

9

Nếu bạn có thể thay đổi .lua file, bạn có thể chèn các cuộc gọi sau đây ngay trước khi bất cứ điều gì bạn cần phải gỡ rối:

require 'remdebug.engine'.start() 

Nó bắt đầu động cơ debugger RemDebug Lua và cố gắng kết nối với một bộ điều khiển. Nếu nó không thể kết nối, nó sẽ chỉ tiếp tục chạy như bình thường. Tôi đã làm some fixes với công cụ trình gỡ lỗi, chẳng hạn như xử lý các biến tạm thời và sinh viên của tôi đang làm việc trên GUI của trình gỡ lỗi (vào năm tới).

Trong thời gian chờ đợi, bạn có thể thử nếu Lua Development Tools hoạt động cho bạn. It features a debugger tương tự như RemDebug, mà ta có thể thiết lập như sau:

require("debugger")(host, port, idekey) 

Ngoài ra, bạn có thể sử dụng SciTE-debug, mà là một phần mở rộng cho trình biên tập SciTE, và có thể đóng vai trò như một bộ điều khiển để RemDebug. Chỉ cần chắc chắn bạn chèn các cuộc gọi đến remdebug.engine.start đâu đó trong mã Lua bạn và chèn này vào cửa sổ đầu ra SciTE:

:debug.target=remote.lua 

Khi bạn bắt đầu chương trình của bạn, SciTE sẽ hiển thị nguồn và dòng hiện tại.

5

Tôi đã sử dụng Decoda biên tập cho điều đó.Nó cho phép bạn đính kèm vào một ứng dụng C++ đang chạy, sau đó nó phát hiện rằng bạn đang chạy một Lua Interpreter trong mã C++ của bạn và hiển thị mã nguồn Lua của bạn, nơi bạn có thể thêm beakpoints và kiểm tra các biến như bình thường.

1

Có thể bạn nên sử dụng Decoda.
Chuyển đến Debug -> Processes -> Attach để đính kèm quy trình của bạn. Điều này sẽ làm việc tốt.

2

Lua plugin for IntelliJ có trình gỡ rối hoạt động không cần thiết lập đặc biệt nào ngoài việc trỏ đến thông dịch viên Lua của bạn.

Dưới đây là một hình màn ảnh của nó:

http://www.screencast.com/t/CBWIkoZPg

+1

Tôi có thể gỡ lỗi những thứ đơn giản theo cách này, nhưng tôi không thể tìm ra cách để gỡ lỗi các thử nghiệm đơn vị "busted". Có lời khuyên nào không? –

3

Tương tự như những gì Michal Kottman mô tả, tôi đã thực hiện một trình gỡ lỗi dựa trên RemDebug, nhưng với thêm bản sửa lỗi và tính năng (trên github: https://github.com/pkulchenko/MobDebug).

Bạn có thể cập nhật tệp .lua của mình với require("mobdebug").start("localhost", 8171) tại thời điểm bạn muốn gỡ lỗi để bắt đầu. Sau đó bạn có thể sử dụng trình gỡ rối dòng lệnh để thực hiện các lệnh, thiết lập các điểm ngắt, đánh giá/thực thi các biểu thức và vv. Thay vào đó, bạn có thể sử dụng ZeroBrane Studio IDE, tích hợp với trình gỡ lỗi và cung cấp cho bạn giao diện người dùng để tải mã của bạn và thực thi các lệnh gỡ lỗi giống nhau trong GUI đẹp mắt. Nếu bạn muốn xem IDE đang hoạt động, tôi có một bản demo đơn giản tại đây: http://notebook.kulchenko.com/zerobrane/live-coding-in-lua-bret-victor-style.

-1

Vâng Cách đơn giản nhất là thế này, nhờ tác giả thiên tài https://github.com/slembcke/debugger.lua

bạn không cần phải thiết lập một máy chủ từ xa debug, chỉ cần yêu cầu một tập tin, và dbg gọi simplely() và nó sẽ tạm dừng, giống như gdb

hướng dẫn cũng được gửi kèm với nó, hãy kiểm tra.

Các vấn đề liên quan