9

Đừng bận tâm. Lý do điều này không hiệu quả: Tôi đã quên meteor reset vì vậy debugger không có cơ hội dừng lại. Duh!Làm thế nào để gỡ lỗi và đăng nhập mã riêng trên phía máy chủ của Meteor?

Thông tin thêm: Tôi đang sử dụng phương thức trong câu trả lời của Mason Chang cho câu hỏi liên quan, không phải là kill -s USR1 [proc_id] (nơi tôi có thể xem tập lệnh, nhưng không thể dừng trong hàm startup().). Ngoài ra, tôi đang sử dụng thiên thạch.

Tôi cố gắng để gỡ lỗi mã Meteor.startup(function()) về phía máy chủ Meteor (ví dụ, dưới /server) với nút-thanh tra, tôi đã đọc question này, và sau đây là câu trả lời để thay đổi run.js, nhưng bằng cách nào đó, kịch bản của riêng mình cho khởi động chức năng không hiển thị trong phần tập lệnh của Chrome.

Làm cách nào để xem mã của tôi ở đây và đặt điểm ngắt và dừng tại các điểm đó? BTW, Meteor_debug() không xuất ra bất cứ thứ gì để điều khiển trình duyệt stdout, stderr hoặc node-inspector. Tôi cũng đã thử console.log() mà không có kết quả. Làm cách nào để bật ghi nhật ký trên máy chủ Meteor?

Nếu nó quan trọng, tôi đang ở trên chi nhánh auth.

Mã này ở đây rất đơn giản (/server/bootstrap.js):

Meteor.startup(function() { 
if (Logs.find().count() === 0) { 
    var data = [/*...some data...*/]; 
    var timestamp = (new Date()).getTime(); 
    Meteor._debug("timestamp: "+timestamp+", data.len: " + data.length); 
    debugger; 
    for (var i = 0; i < data.length; i++) { 
    data[i].timestamp = timestamp++; 
    var entry_id = Logs.insert(data[i]); 
    Meteor._debug("entry_id: "+ entry_id); 
    } 
} 
}); 

Trả lời

10

Bây giờ tôi biết làm thế nào để làm điều này, tôi sẽ trả lời câu hỏi của riêng tôi để chúng tôi có thể giữ thông tin này (trong chi tiết) ở đây: (Điều này dựa trên câu trả lời của Mason Chang cho số này question.)

  1. Dừng thực hiện sao băng.
  2. Sửa /usr/lib/meteor/app/meteor/run.js (hoặc run.js tương ứng được cài đặt bởi thiên thạch trong HOME//.meteorite/meteors/meteor/meteor/[LONG_HEX_CODE]/app/meteor):
    thay đổi dòng
    [path.join(bundle_path, 'main.js'), '--keepalive']
    để
    ['--debug-brk', path.join(bundle_path, 'main.js'), '--keepalive']
    // - debug-brk làm cho giờ nghỉ chủ đề mới ở dòng đầu tiên;
  3. Thêm debugger câu lệnh làm điểm ngắt trong mã máy chủ của bạn;
  4. Chạy node-inspector & trong thiết bị đầu cuối máy chủ. (google "nút thanh tra" để cài đặt nó.)
  5. Chạy sao băng; (điều này sẽ không có trình gỡ lỗi được đính kèm vì chưa có luồng máy chủ, nếu bạn không mở cửa sổ ứng dụng khách.)
  6. Làm mới cửa sổ trình duyệt của khách hàng; (để bắt đầu một chuỗi máy chủ sẽ bị ngắt ở dòng đầu tiên và được đính kèm vào node-inspector.)
  7. Mở cửa sổ trình duyệt tại [SERVER: 8080], mã máy chủ của bạn dừng ở dòng đầu tiên (main.js trong số [PROJECT_DIR]/.meteor/local/build);
  8. Nhấn nút RUN trên cửa sổ trình duyệt trình gỡ lỗi; tùy thuộc vào nơi các câu lệnh debugger của bạn, bạn có thể phải thực hiện một số hành động kích hoạt trong cửa sổ trình duyệt của khách hàng để chạy đến các điểm ngắt debugger. (Lưu ý rằng nếu bạn chờ quá lâu để nhấn nút RUN, cửa sổ ứng dụng khách của bạn có thể hết thời gian và bạn phải làm mới lại.)
  9. Bây giờ bạn có thể thực hiện công cụ gỡ lỗi thông thường trong cửa sổ trình gỡ lỗi máy chủ: , thực hiện trong bảng điều khiển, nhìn vào ngăn xếp, v.v.

Sửa: Đối với việc đăng nhập vào phía máy chủ, bạn có thể sử dụng một trong hai Meteor._debug() và console.log(), họ sẽ hiển thị trong các thiết bị đầu cuối, nơi bạn chạy meteor. Về phía máy khách, các câu lệnh đăng nhập này sẽ xuất ra giao diện điều khiển của trình duyệt của bạn. công cụ.

+0

Tuyệt vời, cảm ơn! – huyz

+0

Liệu hack này vẫn áp dụng vì Meteor hiện có hỗ trợ cho '--debug' và' --debug-brk'? – Brandon

+3

@ Brandon: mọi thứ trở nên dễ dàng hơn nhiều. Xem [Gỡ lỗi trong Câu hỏi thường gặp về thiên thạch không chính thức] (https://github.com/oortcloud/unofficial-meteor-faq/blob/master/README.md#how-do-i-debug-my-meteor-app) (cảm ơn đến Kasima Tharnpipitchai). Hy vọng rằng Qichao có thể cập nhật câu trả lời. –

3

On MacOSX, bạn có thể sử dụng với Chrome:

NODE_OPTIONS="--debug-brk" meteor 

và trong một thiết bị đầu cuối

node-inspector --debug-port=5858 --web-port=12345 

Sau đó kết nối Chrome để 127.0.0.1:12345/debug?port=5858

Nếu không với Webstorm, chỉ cần tạo cấu hình Gỡ lỗi từ xa Node.js và chạy nó:

 
Name : Meteor 
Host : 127.0.0.1 
Port 5858 

Lưu ý rằng khi máy chủ đã khởi động, bạn cần phải bấm chạy để Meteor tải, và sau đó tạm dừng để gỡ lỗi khỏi bàn điều khiển máy chủ.

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