2010-03-24 20 views
6

Tôi đang làm quen với một số mã JRuby, và tôi muốn có thể đặt một điểm ngắt trong mã và chạy (như thường lệ) từ dòng lệnh, có nó đột nhập vào trình gỡ lỗi khi nó đến đó điểm. Có cái gì tôi có thể đặt trong mã của tôi để buộc JRuby đột nhập vào trình gỡ rối không?Tôi phải đặt gì vào mã Ruby (JRuby) của tôi để đột nhập vào trình gỡ lỗi?

Tôi đã thử chạy jruby -r debug foo.rb (thay vì thông thường jruby foo.rb), sau đó đặt điểm ngắt với b bar.py:98 và sau đó tiếp tục. Nhưng trình gỡ lỗi dừng lại mỗi lần có một ngoại lệ, và dường như có rất nhiều người trong số họ trước khi nó được vào dòng mã tôi quan tâm. Tôi muốn có thể đặt "break-into-debugger" (các) dòng trong mã của tôi và chạy jruby foo.rb và có vị trí đầu tiên trình gỡ lỗi dừng lại ở dòng đó.

(tức là tôi đang tìm kiếm tương đương với Ruby/JRuby của import pdb;pdb.set_trace() bằng Python.)

Trả lời

5

Bạn có thể thử NetbeansRuby IDE, nó có JRuby thông dịch và gỡ lỗi các công cụ nhúng và bạn có thể gỡ lỗi trực quan trong IDE trực tiếp.
Nếu sử dụng một IDE không phải là một lựa chọn cho bạn, chỉ cần cài đặt de debug đá quý vào distro JRuby bạn và sử dụng nó thông qua debugger lệnh:

  1. tay tải về ruby-debug-base-0.10.3.1-java. đá quý từ debug-commons đến một thư mục địa phương.
  2. Cài đặt Gem vào kho JRuby Gem của bạn:
    jruby -S gem install -l ruby-debug-base-0.10.3.1-java.gem
  3. Cài đặt ruby-debug đá quý:
    jruby -S gem install --ignore-dependencies ruby-debug

Lệnh debugger nên làm việc ngay bây giờ.

# test.rb 
require 'rubygems' 
require 'ruby-debug' 
debugger 
# run like this: 
jruby --debug -S rdebug test.rb 

Thông tin thêm về Netbeans wiki, rdebug wikiJRuby wiki

+0

Netbeans đang làm việc độc đáo cho tôi, chỉ với một chút cấu hình cần thiết. Cảm ơn! –

+1

Trong JRuby 1.5+, tất cả các đá quý cần thiết sẽ được cài đặt theo mặc định, vì vậy sẽ không cần phải cài đặt bất cứ thứ gì (đặc biệt với các tùy chọn dòng lệnh không mặc định). Vì vậy, gỡ lỗi sẽ làm việc trong JRuby 1.5+ ra khỏi hộp. – vsizikov

1
require 'rubygems' 
require 'ruby-debug' 
debugger 
+0

Tôi nhận được "LoadError: không có tệp như vậy để tải - ruby-debug" - có lẽ điều đó không hoạt động trong JRuby? –

+0

Rõ ràng JRuby không hỗ trợ bất kỳ đá quý nào với các thành phần Ruby không phải là bản địa; Google bật lên như sau, nhưng tôi không có ý tưởng nếu nó là bất kỳ tốt: http://debug-commons.rubyforge.org/ – bnaul

1

Tôi đang sử dụng JRuby 1.7.3 (1.9.3p385) trên Windows 7.

Trái với những gì người ta nói, có không không dường như là một phiên bản của ruby-debug được cài đặt sẵn với JRuby. Tuy nhiên, tôi đã cài đặt nó bằng cách chạy gem install ruby-debug. Tôi bắt đầu trình gỡ lỗi trong mã của mình như sau:

require 'rubygems' 
require 'ruby-debug' 
debugger 

Bạn nên gọi phương thức debugger ở mọi nơi bạn muốn có điểm ngắt.

Tôi chạy đoạn code như thế này:

jruby --debug program.rb 

Tùy chọn --debug là không bắt buộc, nhưng nếu không có nó, bạn nhận được một cảnh báo rằng "truy tìm (ví dụ set_trace_func) sẽ không nắm bắt tất cả các sự kiện mà không --debug cờ".

Một câu trả lời khác ở đây sử dụng tùy chọn -S rdebug trên dòng lệnh. Tùy chọn đó không cần thiết để gỡ lỗi và nó làm cho trình gỡ lỗi bắt đầu ngay từ đầu chương trình của bạn.Chỉ cần gọi phương thức debugger để khởi động trình gỡ rối khi bạn cần; không sử dụng tùy chọn đó.

Thậm chí không có đá quý ruby-debug, có vẻ như vẫn còn một số loại gỡ lỗi cơ bản được tích hợp sẵn trong JRuby qua số debug.rb. Bạn chỉ cần viết load 'debug.rb' trong một tệp để bắt đầu trình gỡ rối. Nó in ra một số tin nhắn junky ("Debug.rb" và "Emacs hỗ trợ có sẵn.") Nhưng nó có vẻ làm việc.

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