2011-12-17 28 views
30

Vì có thể có rất nhiều Phương pháp ma bên trong đá quý ruby, tôi không nghĩ rằng nên nghiên cứu cơ chế bên trong của đá quý ruby ​​chỉ bằng đọc mã nguồn của nó tĩnh. Có cách nào để đính kèm các tập tin mã nguồn của một phần đá quý thứ ba để một quá trình ruby ​​đang chạy để gỡ lỗi để tôi có thể thiết lập điểm break và xem cách mọi thứ hoạt động tự động?
BTW, tôi đã cố gắng điều hướng đến tệp nguồn của gem thứ ba trong RubyMine bằng cách nhấp vào menu ngữ cảnh "Go To-> Implementations" của câu lệnh 'require' hoặc biểu tượng khác của gem phần ba (Ví dụ: require 'watir'), không thành công. Nó là bình thường đối với một IDE của một ngôn ngữ đánh máy năng động như Ruby để không điều hướng biểu tượng?Cách tốt nhất để gỡ lỗi đá quý của bên thứ ba trong ruby ​​

Trả lời

37

Tôi rất thích biết nếu có một cách tốt hơn để làm điều này, nhưng làm thế nào tôi thường làm điều đó là:

  1. Thêm đá quý ruby-debug để Gemfile của bạn (hoặc ruby-debug19 nếu bạn trên Ruby 1.9.2)
  2. Tìm Đá quý bằng cách thực hiện bundle show gemname. Tôi đang trên một máy Mac vì vậy tôi thường ống này để pbcopy vì vậy nó được sao chép vào clipboard của tôi. bundle show rails | pbcopy
  3. Mở thư mục đá quý trong trình chỉnh sửa yêu thích của bạn. mvim /path/to/gem/directory
  4. Điều hướng đến tệp và dòng nơi bạn muốn đặt điểm ngắt * và chèn debugger phía trên dòng đang đề cập.
  5. Nạp lại trang, chạy thử nghiệm, hoặc làm bất cứ điều bạn sẽ để tải tệp Gem để thực hiện
  6. Khi thực hiện dừng lại ở debugger, bạn có thể kiểm tra các biến (p variable_name), và đường di chuyển bằng phù hợp với ruby debugger commands.

* Biết được nơi để đặt breakpoint thể mất một số hiểu biết về mã, nhưng bạn nên bắt đầu trong lib/gemname.rb

+3

Cảm ơn. Điều này làm việc tuyệt vời. FWIW, tôi đã sử dụng các hướng dẫn này với [Pry] (https: // rubygems.org/gems/pry) thay vì ruby-debug và nó cũng hoạt động. –

+1

Điều này có làm gián đoạn các ứng dụng khác trên cùng một máy nếu chúng đang sử dụng cùng một Gem không? – flyingL123

+0

@ flyingL123, tôi cho rằng nó sẽ làm gián đoạn những người khác, nếu họ chạy trong chế độ gỡ lỗi như ứng dụng của bạn. – parzival

0

Trong ngôn ngữ mà thay đổi mã trong thời gian chạy, như Ruby, khó có thể dự đoán chính xác 100% nguồn gốc của biểu tượng, biện pháp, vv

tôi đối phó với rất nhiều đá quý bên thứ ba mà cần phân tích mã nguồn và Tôi thấy rằng công cụ tốt nhất cho công việc này là Netbeas + đó là các plugin Ruby và Rails.

  • cho phép chuyển hướng tốt trong mã đá quý phụ thuộc nguồn (không giống như lựa chọn thay thế khác)
  • breakpoint thị giác và gỡ lỗi mà thực sự làm việc (với dấu vết và tất cả) **

** nó có một số trục trặc với các cuộc gọi phương thức trong các khối mã được tạo ra (như mỗi {}) nhưng tôi đã học cách xử lý các số

Những gì tôi thường làm là đặt điểm ngắt và phân tích mã khi chạy.

9

tôi sẽ tránh chỉnh sửa các tập tin Gem như đề xuất trong câu trả lời chấp nhận hiện nay. Thay vào đó, hãy đặt lệnh debugger vào một trong các tệp ứng dụng của bạn và sử dụng lệnh break để đặt điểm ngắt trong đá quý. Tôi đang sử dụng rvm với một gemset vì vậy đây là cách tôi làm điều đó:

break /Users/chris/.rvm/gems/[email protected]<gemset>/gems/<gem_name>-<gem-version>/<path_to_file>:<line_number>

+0

Câu trả lời được chấp nhận có ảnh hưởng đến các ứng dụng khác trên cùng một máy nếu chúng đang sử dụng cùng một Gem không? Nếu vậy, có vẻ như giải pháp này sẽ tránh được vấn đề đó. – flyingL123

+2

Có. Đó là toàn bộ vấn đề. Trừ khi bạn ra khỏi các tùy chọn, tôi sẽ tránh chỉnh sửa các tệp Gem bằng mọi giá trừ khi bạn sẵn sàng chia chúng –

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