Meteor : 서버 측에서 디버그


78

누구든지 서버 측 코드를 디버깅하는 좋은 방법을 알고 있습니까? Node.js 디버그를 활성화 한 다음 node-inspector를 사용하려고 시도했지만 내 코드가 표시되지 않습니다.

나는 console.log를 사용하지만 이것은 매우 비효율적입니다.

업데이트 : Linux 컴퓨터에서 다음 절차가 작동하는 것을 발견했습니다.

  1. Meteor를 실행하면 두 개의 프로세스가 생성됩니다.

    프로세스 1 : / usr / lib / meteor / bin / node /usr/lib/meteor/app/meteor/meteor.js

    process2 : / usr / lib / meteor / bin / node /home/paul/codes/bbtest_code/bbtest02/.meteor/local/build/main.js --keepalive

  2. process2에서 kill -s USR1을 보내야합니다.

  3. 노드 검사기를 실행하면 서버 코드를 볼 수 있습니다.

첫 번째 시도에서 / usr / lib / meteor / bin / meteor의 meteor 시작 스크립트의 마지막 줄을 다음과 같이 수정합니다.

exec "$DEV_BUNDLE/bin/node" $NODE_DEBUG "$METEOR" "$@"

실행 NODE_DEBUG=--debug meteor명령 프롬프트에서. 이것은 process1에 --debug 플래그 만 놓았으므로 node-inspector에서 meteor 파일 만보고 내 코드를 찾을 수 없습니다.

누군가 Windows 및 Mac 컴퓨터에서 이것을 확인할 수 있습니까?


6
참고로 console.log 대신 Meteor._debug를 사용하십시오 (console.log를 호출하게되지만 언젠가 개선 될 것이라는 메모가 있습니다.)
Josh

내 대답을 참조하십시오. MAC에서 작동 중이며 내 js 파일을보고 디버그 할 수있었습니다.
나치 켓

1
내 Mac에서 이것을 시도했지만 갈 수 없습니다.
Gezim 2012-07-05

1
@ Harmal000이 질문에 연결했습니다-다른 질문에 연결하려고 했습니까?
Kevin

이 기사는 meteor.js 디버깅에 매우 유용합니다. joshowens.me/easily-debugging-meteor-js
Julien Leray

답변:


88

Meteor 0.5.4에서는이 작업이 훨씬 쉬워졌습니다.

먼저 터미널에서 다음 명령을 실행하십시오.

npm install -g node-inspector
node-inspector &
export NODE_OPTIONS='--debug-brk'
meteor

그런 다음 http://localhost:8080브라우저에서 열어 노드 검사기 콘솔을 봅니다.

최신 정보

Meteor 1.0부터는

meteor debug

이것은 본질적으로 위의 명령에 대한 바로 가기이며, 언급 한대로 브라우저에서 노드 검사기를 실행합니다.

최신 정보

Meteor 1.0.2에서는 콘솔 또는 셸이 추가되었습니다. 변수를 출력하고 서버에서 명령을 실행하는 것이 유용 할 수 있습니다.

meteor shell

1
답변을 게시 해 주셔서 감사합니다! Self-Promotion에 대한 FAQ를 주의 깊게 읽어 보시기 바랍니다 . 또한 자신의 사이트 / 제품에 연결할 때마다 면책 조항을 게시 해야 합니다.
Andrew Barber

1
이 디버거를 어떻게 비활성화합니까? meteor이 디버거를 실행할 때마다 클라이언트 측에서 실행되는 유성 앱이 실행되고 잠 깁니다.
fuzzybabybunny 2014-06-30

콘솔은 항상 [object Object]를 출력합니다. 예 :console.log('asd') [object Object]
sites

1
값을 인쇄 할 수 있습니까? 어떻게?
사이트

에 어떤 공식 문서가 있습니까 meteor debug. 중단 점을 설정하는 코드를 찾을 수 없습니다.
Tony Brix

16

Meteor 앱은 Node.js 앱입니다. meteor [run]명령 으로 Meteor 앱을 실행할 때 디버그 모드에서 시작 하도록 NODE_OPTIONS환경 변수를 구성node 할 수 있습니다 .

NODE_OPTIONS환경 변수 값의 예 :

  • --debug
  • --debug=47977 -포트 지정
  • --debug-brk -첫 번째 진술 중단
  • --debug-brk=5858 -포트를 지정하고 첫 번째 명령문에서 중단

이면 동일한 쉘에서 실행되는 export NODE_OPTIONS=--debug모든 meteor명령이 환경 변수를 상속합니다. 또는 한 번의 실행에 대해서만 디버깅을 활성화 할 수 있습니다.NODE_OPTIONS="--debug=47977" meteor .

디버그하려면 node-inspector다른 셸에서 실행 한 다음 실행 하라는 메시지 http://localhost:8080/debug?port=<the port you specified in NODE_OPTIONS>에 관계없이 로 이동하십시오 node-inspector.


10

디버그 모드에서 node.js를 시작하려면 다음과 같이했습니다.

  1. /usr/lib/meteor/app/meteor/run.js를 엽니 다.
  2. 전에

    nodeOptions.push(path.join(options.bundlePath, 'main.js')); 
    

    더하다

    nodeOptions.push('--debug');
    

다음은 디버거 이클립스를 연결하는 추가 실용적인 단계입니다.

  1. eclipse를 디버거로 사용하여 node.js를 연결하는 것이 더 쉽기 때문에 여기에서 '--debug'대신 '--debug-brk'를 사용하십시오.
  2. '디버거'추가 디버깅하려는 코드에서. (개인적으로이 방식을 선호합니다)
  3. 콘솔에서 유성을 실행
  4. Eclipse의 node.js에 연결 (V8 도구, localhost : 5858에 연결)
  5. 실행, 디버거가 히트 할 때까지 기다립니다.

meteor 앱 폴더에서 meteor를 시작하면 콘솔 " debugger listen on port 5858 "이 표시됩니다.


mrt를 사용하는 경우 물론 run.js의 경로는 다릅니다.
Jameson Quinn

... ~ / .meteorite / meteors / meteor / meteor / 0a148c69d6af9832006a6f6d27cc112ed90cb3e4 / app / meteor /에서
Jameson Quinn

내 파일에 중복 /usr/lib/usr/local/알 수없는 원인에 의해. 그것이 당신에게 작동하지 않는 경우, 편집을 시도 /usr/local/meteor/app/meteor/run.js대신에/usr/lib/meteor/app/meteor/run.js
zVictor

감사합니다. 귀하의 솔루션은 제가 찾은 가장 쉬운 방법입니다. 프로세스를 죽일 필요가 없으며 명령 줄에 변수를 설정하지도 않습니다.
zVictor

10

Meteor 1.0.3.1에서 (Sergey.Simonchik 답변 업데이트)

다음으로 서버 시작 meteor run --debug-port=<port-number>

브라우저를 http://localhost:6222/debug?port=<port-number>

<port-number>지정한 포트는 어디에 있습니까 ?

코드에서 debugger; 에서 중단 점을 설정할 위치를 하십시오.

debugger;호출 된 위치에 따라 검사기가 열린 상태에서 클라이언트 또는 서버 브라우저 창에서 중단됩니다.


7

GUI를 통해 중단 점을 설정하는 것을 좋아합니다. 이렇게하면 내 앱에서 디버깅 코드를 제거 할 필요가 없습니다.

이것이 내 지역 유성 앱을 위해 서버 측에서 관리 한 방법입니다.

meteor debug

이런 식으로 앱을 시작하십시오.

제공된 주소로 Chrome을 엽니 다. https://github.com/node-inspector/node-inspector 를 설치해야 할 수도 있습니다. 할 수도 있습니다 (지금 Meteor에 번들로 제공 될 수 있습니까? 확실하지 않음)

이상한 내부 유성 코드 (사용자가 작성한 앱 코드가 아님)가 표시됩니다. 언론 플레이코드를 실행하려면 을 . 이 코드는 단순히 연결을 수신하기 위해 서버를 시작합니다.

play를 누른 후에 만 ​​디버거 폴더 구조에 "app" 이라는 새 디렉토리가 표시 됩니다. 유성 프로젝트 파일이 있습니다. 원하는 줄에 중단 점을 설정하십시오.

앱의 로컬 주소를 엽니 다 . 이것은 서버 측 코드를 실행하고 중단 점에 도달 할 수 있어야합니다!

참고 : 검사기를 다시 열고 앱이 다시 시작될 때마다이 프로세스를 다시 수행해야합니다!



5

왜 그것이 당신에게 효과가 없었는지 모르겠습니다.
콘솔 (Mac)에서 다음 단계를 따라 사용할 수 있습니다.

$ ps  
$ kill -s USR1 *meteor_node_process_id*  
$ node-inspector &

위의 단계는 https://github.com/dannycoates/node-inspector 에 언급되어 있습니다 . 실행중인 노드 프로세스에 node-inspector를 연결하기위한 것입니다.


Mac에서만 테스트했습니다. Mac을 사용하고 있습니까?
Nachiket

네, 맥이 있습니다. 코드에 중단 점을 어떻게 추가합니까? 전체에 사용하는 정확한 단계는 무엇입니까?
Gezim

위의 (이 대답) 단계 후에 검사자를 시작합니다. $ node-inspector & Chrome에서 127.0.0.1:8080/debug?port=5858 을 열었습니다 . 나는 웹킷 - 관리자의 소스 탭에서 내 파일을 볼 수 있었다
나치 켓

1
나는 이것을 시도 debugger하여 검사자에 및 중단 점을 모두 추가 했지만 둘 다 작동하지 않았습니다. 왜 그런지 아세요?
Jakub Arnold

볼 때 ps | grep node(또는 유사) 부모 노드 프로세스가 아니라 신호를 보낼 main.js pid를 선택했는지 확인하십시오. 이것이 내가 작동하게 한 방법입니다.
quinn 2013

4

저는 meteor-inspector 라는 작은 유성 패키지를 작성했습니다. 이것은 유성 앱을 디버그하기 위해 노드-검사기의 사용을 단순화합니다. 내부적으로 노드 검사기의 수명주기를 관리하므로 일부 파일이 변경된 후 사용자가 디버거를 수동으로 다시 시작할 필요가 없습니다.

자세한 내용과 구체적인 사용 지침은 https://github.com/broth-eu/meteor-inspector참조하십시오 .


4

유성 1.3.5.2의 경우 실행

meteor debug --debug-port 5858 + n n은 0이 아닌 숫자이므로 node-inspector가 웹 포트로 8080 + n을 사용합니다.


3

오픈 소스 개발자를위한 강력한 IDE 무료 인 WebStorm을 사용하면 서버 측을 훨씬 쉽게 디버깅 할 수 있습니다.

Windows에서 테스트했으며 구성이 고통스럽지 않았습니다 . 내 대답을 참조하십시오 .


3

내 문제를 해결하는 검사관은 유성 서버 콘솔입니다. 다음은 설치 과정입니다.

  1. 프로젝트 폴더에서 스마트 패키지를 추가하십시오 server-eval.

    mrt add server-eval
    

    Meteor 1.0의 경우 :

    meteor add gandev:server-eval
    
  2. 유성을 다시 시작하십시오.

  3. 여기crx 에서 Chrome 확장 파일을 다운로드 합니다 .
  4. Chrome에서 확장 프로그램 페이지를 열고 crx파일을 확장 프로그램 페이지로 드래그 하십시오.
  5. Chrome을 다시 시작하십시오.
  6. 웹 검사기를 확인하여 서버 측 코드를 평가하십시오.

    여기에 이미지 설명 입력

노드 검사기와 비교할 때 더 명확한 출력이 있습니다.


내가 기억하는 것은 중단 점과 함께 작동했지만 확실하지 않습니다.
사이트

어떻게 설정했는지 기억하십니까? 개발 도구 또는 인 코드를 통해?
Sabrina Leggett

dev에 도구,하지만 기억이 안 정확히 어떻게
사이트

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.