Node.js 애플리케이션을 어떻게 디버깅합니까?


1578

Node.js 서버 애플리케이션을 어떻게 디버깅합니까?

지금은 주로 다음과 같은 print 문으로 경고 디버깅 을 사용 하고 있습니다.

sys.puts(sys.inspect(someVariable));

더 나은 디버그 방법이 있어야합니다. Chrome 에 명령 줄 디버거가 있다는 것을 알고 있습니다. 이 디버거는 Node.js에서도 사용할 수 있습니까?


3
명령 행 주입에 Locus 를 사용할 수 있습니다 .
Ali Davut

5
기존 IDE 접근 방식으로 디버깅하려면 vscode use vscode youtube.com/watch?v=egBJ0cd0GLM
jw56578

4
이 기사가 매우 흥미 로웠 으며 Chrome DevTools로 Node.js를 디버깅하는 것이 좋습니다. 희망이 :) 도움이
Timbergus

2
"경고 디버깅":)
Red Pea

로드시 실제 서버 코드를 디버그하려면 --inspect-brkINSTEAD OF로 nod를 실행해야합니다 --inspect. 참조 stackoverflow.com/questions/59596138
호르헤 Orpinel

답변:


1261

노드 인스펙터 가 하루를 절약 할 수 있습니다! WebSocket을 지원하는 모든 브라우저에서 사용하십시오 . 중단 점, 프로파일 러, 라이브 코딩 등 ... 정말 훌륭합니다.

다음과 같이 설치하십시오.

npm install -g node-inspector

그런 다음 다음을 실행하십시오.

node-debug app.js

14
소원 노드 검사기가 활성화되었습니다. 프로파일 링 구성 요소는 약간의 사랑이 필요합니다.
Jonathan Dumaine

13
불행히도 node-inspector는 최신 버전의 Node.js에서 작동하지 않으며 v0.1 이후 브라우저 콘솔에 로깅을 지원하지 않았습니다. node-codein은 버그였습니다. 따라서 객체 등을 웹 브라우저 콘솔에 덤프 할 수있게하여 디버깅에 도움이되는 자체 모듈을 작성했습니다. 나는 그것이 다른 누군가에게 유용하다고 생각했다 : node-monkey . 또한 Firefox와 Chrome 모두에서 작동합니다.
저스틴 워 켄틴

7
이것은 놀랍고도 인기있는 도구 였기 때문에, 원저자가 더 이상이를 유지할 수있는 리소스가 없다고 인정했다는 사실은 오픈 소스 커뮤니티가 선택할 수있는 문제가되지 않습니까?
PeterT

34
이제 인스펙터는 StrongLoop에 의해 활발하게 유지되고 최신 버전 (0.3)으로 다시 작동합니다! 공지 사항 : blog.strongloop.com/…
balupton

21
"버전 6.3부터 Node.js는 대부분 Node Inspector를 사용하지 않는 buit-in DevTools 기반 디버거를 제공합니다. 예를 들어 시작하려면 이 블로그 게시물 을 참조하십시오 . 내장 된 디버거는 V8 / Chromium 팀에서 직접 개발하여 특정 고급 기능을 제공합니다. Node Inspector에서 구현하기 어려운 기능 (예 : 길거나 비동기 스택 추적) " -노드 관리자
리포지토리

750

디버깅

프로파일 링

  1. node --prof ./app.js
  2. node --prof-process ./the-generated-log-file

힙 덤프

화염 사진

트레이싱

벌채 반출

디버깅 정보를 출력하는 라이브러리

스택 추적 정보를 향상시키는 라이브러리

벤치마킹

다른

유산

이것들은 작동하는데 더 이상 유지되지 않거나 더 이상 최신 노드 버전에 적용되지 않습니다.


8
Nodetime 소개 : nodetime 서버에 데이터를 보내려고하지 않는 사람들을 위해, (이 여전히 nodetime 기반으로)을 로컬 "대안"거기 look에 뾰족한 밖으로로서, 모듈 stackoverflow.com/questions/12864221/nodejs-memory- 프로파일 링
reallynice

노드 타임의 CPU 보고서는 매우 유용하지 않습니다. 1. '자기'시간이없는 메소드 트리 만 얻습니다. 2. 나뭇 가지가 일정 비율 이하로 손질 된 것 같습니다. 이 2는 CPU가 대부분의 시간을 소비하는 위치를 이해하기가 매우 어렵습니다.
shacharz

npm install -g profiler는 Windows 7에서 누락 된 python에 대해 불평합니다. python = C : \ Python34 \를 설정하려고했지만 충돌이 발생합니다.
Stepan Yakovenko

기본적으로 작동하는 유일한 프로파일 러는 nodetime입니다. 그러나 CPU 프로파일 링 스택 트레이스를 사용할 수 없습니다 (자세한 내용은 충분하지 않습니다). Nodejs 도구는 MSVC 2012 4도 프로파일을 가지고 있지만, 그것은 또한 ... 중요한 수정되지 않은 버그보고있다
스테판 Yakovenko 보낸

나를 위해 일한 유일한 프로파일 러는 nprof+ v8.logfrom node --prof였습니다.
Dan Abramov

253

V8의 구글의 일환으로 발표 디버거 크롬 개발자 도구는 디버그 Node.js를 스크립트로 사용할 수 있습니다. 이것이 어떻게 작동하는지에 대한 자세한 설명은 Node.js GitHub 위키 에서 찾을 수 있습니다 .


12
Paul Irish와 Pavel이 Google IO에서 프레젠테이션 한 후 Eclipse가 필요없이 node.js를 Chrome 개발자 도구로 바로 디버깅 할 수 있습니까?
balupton

+1 나를 위해 아주 잘 작동했습니다. Mac OS X에서 새로운 Eclipse 3.x x64 버전을 사용합니다. 설치 지침도 잘 작성되었습니다. 감사합니다.
아마추어 바리 스타

또한 Nodeclipse 내에서 제공 nodeclipse.org (일부 Node.js를 관련 버그 수정과)
폴 Verest

이 분야에 대한 나의 입장은 trepanjs ( npmjs.com/package/trepanjs )입니다. 그것은 노드 디버거의 장점을 모두 가지고 있지만 gdb에 더 적합합니다. 또한 구문 강조,보다 광범위한 온라인 도움말 및 더 똑똑한 평가와 같은 더 많은 기능과 명령이 있습니다. 멋진 기능에 대해서는 github.com/rocky/trepanjs/wiki/Cool-things 를 참조하십시오 .
rocky

1
이 기능은 현재 야간 버전에서 사용할 수 있습니다. 지침을 보려면 여기를 확인하십시오.https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
zeronone

191

Node에는 버전 6.3 부터 자체 GUI 디버거가 내장되어 있습니다 (Chrome의 DevTools 사용)

노드 내장 GUI 디버거

인스펙터 플래그를 전달하면 인스펙터의 URL이 제공됩니다.

node --inspect server.js

--inspect-brk대신 전달하여 첫 번째 줄을 끊을 수도 있습니다 .


2
위의 단계를 할인하지 않고 공유하기 만하면됩니다. 설치가 쉽고 약간 더 견고한 래퍼를 만들려고했습니다. 참조 : github.com/jaridmargolin/inspect-process
Jarid R. Margolin

1
@ JaridR.Margolin 니스. 대신 사용하도록 답변을 업데이트했습니다. 설치가 훨씬 쉽고 더 잘 작동합니다 :)
gregers

2
이 답변은 현재 맨 아래에 있으며 실제로 나를 위해 일한 유일한 사람입니다. 대박!
LOAS

3
누군가를 도울 수 있도록 youtu.be/rtZKUnks6jI 에서이 과정을 설명하는 비디오를 던졌습니다 .
RoccoB

2
크롬 개발자 도구의 어두운 테마는 어디에서 얻었습니까?
Pieter Meiresone

93

Node.js 버전 0.3.4+에는 디버깅 지원 기능이 내장되어 있습니다.

node debug script.js

매뉴얼 : http://nodejs.org/api/debugger.html


1
사용 방법에 대한 문서 링크가 있습니까?
Fabian Jakobs

2
문서가 없습니다. v0.3.5로 업데이트되었습니다. "디버거;" 코드에서 중단 점으로 작동합니다. ndb / gdb처럼 작동합니다. "node debug script.js"유형 도움말을 수행 한 후 지원하는 명령이 표시됩니다. p = print, l = list ... 그래서 당신은 전 세계를 입력 할 필요가 없습니다
JulianW

2
Windows에서는 "node.exe --debug myscript.js"이지만 여전히 작동하지 않습니다.
Marc

6
당신은 아마 변경해야 --debug으로 debug대시하지 않고. 그것이 내가 마침내 작동하게하는 방법입니다. 혼란 스럽습니다--debugdebug두 개의 서로 다른 일을.
benekastah

실제로 프로그램을 실행하려면 어떻게해야합니까? "r-> app is already running...", 계속하려고 할 때 입력을 얻으려고하는 명령문이 실행되면 필요한 입력을 입력하는 대신 디버그 프롬프트에서 다시 표시됩니다.
Michael

70

디버깅을 위해 Visual Studio Code 를 선택했습니다. 도구 나npm install물건을 설치하는 오버 헤드가 없습니다. package.json에서 앱의 시작 지점을 설정하면 VSCode가 솔루션 내에 구성 파일을 자동으로 만듭니다. Atom과 같은 편집기가 빌드되는Electron을 기반으로합니다.

VS Code는 VS, Eclipse 등과 같은 다른 IDE에서와 비슷한 디버깅 경험을 제공합니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오


시원하지만 지연이 있습니다. 그렇기 때문에 Sublime을 선호합니다.
calbertts 2016 년

3
하지만 숭고한 디버거를 가지고 있지 않으며, 내가 VS 코드가 꽤 빠른 생각
에드 Faizan

1
5 년 전부터 숭고한 라이센스를 가지고 있습니다. 몇 달 전부터 Sublime Text를 설치하지 않고 vscode 만 설치했습니다. 기본적으로 Sublime에서 놓친 많은 도구가 있습니다 (통합 터미널과 같이).
elboletaire

항상 구성 폴더를 묻는 메시지가 표시되면 즉시 작동하지 않습니다.
carkod

@carkod vs 코드 자동 연결 환경 설정을 활성화 하고 vs 코드 터미널 을 사용 하여 스크립트를 시작합니다. ex node --inspect file-name.js
또는 Vipul Dessai

57

나는 개인적으로 사용하는 JetBrains의 WebStorm 이 유일한 자바 스크립트 IDE있어 나는 모두 프론트 엔드와 백엔드 자바 스크립트에 좋은 곳입니다있는 발견 한 것이다.

여러 OS에서 작동하며 Node.js 디버깅 기능이 내장되어 있습니다 (다른 많은 것들도 포함되어 있음) ( http://www.jetbrains.com/webstorm/features/index.html ).

내 유일한 '문제'/ wishlist 항목 아르 있었다 :

  1. Windows보다 Mac에서 더 많은 리소스가 부족한 것 같습니다 버전 6에서는 더 이상 문제가되지 않습니다.
  2. Sublime Text 2 와 같이 Snippet을 지원하면 좋을 것입니다. 'fun'을 입력하고 'tab'을 탭하여 기능을 넣으면 입니다. 아래 @WickyNilliams 의견을 참조하십시오-라이브 템플릿을 사용하면 스 니펫 지원도 있습니다.

10
웹 스톰은 스 니펫을 대신하는 "라이브 템플릿"으로 알려져 있지만 스 니펫은 BTW ;-)를 지원합니다.
WickyNilliams

3
node.js 앱을 디버깅하고 이미 Intellij IDEA 라이센스가있는 경우 WebStorm 라이센스를 구매하지 않고도 node.js 플러그인을 설치할 수 있습니다. 플러그인이 설치되면 실행 / 디버그 구성을 설정하는 것은 매우 쉽습니다.
Josh Liptzin

42

여기에 많은 훌륭한 답변이 있지만 (내 접근법이 어떻게 진화했는지에 따라) 견해를 추가하고 싶습니다.

디버그 로그

우리 모두가 선을 좋아 console.log('Uh oh, if you reached here, you better run.')하고 때로는 훌륭하게 작동하기 때문에 너무 멀리 떨어져 있다면 적어도 Visionmedia의 디버그로 로그에 약간의 블링을 추가하십시오 .

대화식 디버깅

콘솔 로깅만큼 편리하게, 전문적으로 디버그하려면 소매를 감아 끼 우고 멈춰야합니다. 중단 점을 설정하고, 코드를 단계별로 살펴보고, 범위와 변수를 검사하여 이상한 동작을 일으키는 원인을 확인하십시오. 다른 사람들이 언급했듯이, 노드 검사기는 실제로 꿀벌 무릎입니다. 내장 디버거로 할 수있는 모든 작업을 수행하지만 친숙한 Chrome DevTools 인터페이스를 사용합니다. 나처럼 Webstorm 을 사용하는 경우 여기 에서 디버깅하는 데 유용한 안내서가 있습니다.

스택 추적

기본적으로 이벤트주기 (틱)의 여러주기에 걸쳐 일련의 작업을 추적 할 수 없습니다. 이 문제를 해결하려면 longjohn을 살펴보십시오 (그러나 프로덕션에는 없습니다!).

메모리 누수

Node.js를 사용하면 상당한 시간 동안 서버 프로세스를 유지할 수 있습니다. 심한 누수가 발생했다고 생각되면 어떻게합니까? 를 사용하여 힙 덤프 와 크롬 DevTools로 약간의 스냅 샷을 비교하고 변경 있는지 확인합니다.


몇 가지 유용한 기사를 확인하십시오

비디오를보고 싶은 경우

어떤 경로를 선택하든 디버깅 방식을 이해해야합니다.

여기에 이미지 설명을 입력하십시오


자신의 문제를보고 아는 것은 고통스러운 일입니다
당신 자신과 다른 누구도 그것을 만들지 않았다는 것

소 포클, 아약스


41

Theseus 는 Adobe 리서치의 프로젝트로 Node.js 코드를 오픈 소스 편집기 브래킷 에서 디버깅 할 수 있습니다 . 실시간 코드 범위, 소급 검사, 비동기식 호출 트리와 같은 흥미로운 기능이 있습니다.

스크린 샷


이것은 꽤 멋지지만 여전히 tho의 역 추적이 무엇인지 모릅니다
misaxi

나는 현재 테세우스를 좋아하지만 여전히 중단 점을 설정하고 추적해야하는 문제가 있습니다. 현재 앱을 종료하고 --debug로 노드를 시작하고 trhough를 추적 한 다음 node-theseus로 앱을 시작해야합니다. 중단 점과 함께 테세우스를 사용할 수 있습니까? GitHub 페이지, StackOverflow 및 포럼을 검색했지만 지금까지 운이 없습니다. 뭔가 빠졌습니까?
유진

25

Visual Studio 2012 또는 2013 용 Node.js 도구 에는 디버거가 포함되어 있습니다. 여기 개요 에는 "Visual Studio 용 Node.js 도구에 노드 앱 디버깅에 대한 완벽한 지원이 포함되어 있습니다."가 나와 있습니다. Node.js를 처음 사용했지만 .NET에 대한 배경 지식이 있기 때문에 Node.js 응용 프로그램을 디버깅하는 데 유용한 추가 기능을 발견했습니다.


23

Visual Studio Code 에는 Node.js 디버깅 지원이 정말 좋습니다. 무료, 오픈 소스 및 크로스 플랫폼이며 Linux, OS X 및 Windows에서 실행됩니다.

당신 이 필요로 하는 경우 grunt 및 gulp 작업을 디버깅 할 수도 있습니다 ...


1
Visual Studio Code 8.0부터 OSX 및 Linux에 대한 디버깅 지원이 실제로 향상되었습니다.
bgse

밤새 노드 인스펙터와 strongloop가 Windows (Visual Studio Community, npm 2로 다운 그레이드, python, env 변수 설치, cmd not babun / cygwin 등)에서 작동하도록 한 시간 동안 보낸 후 1 시간 동안 이것을 가지고 노는 나는이 (당신이 webstorn이없는 경우) 창에서 가능성이 일반적으로 적어도 최선의 선택이라고해야
dashambles

22

안정적이고 매우 간단한 Node.js 코드를 디버깅하는 다른 접근법을 작성했습니다. https://github.com/sa/iron-node 에서 사용할 수 있습니다 .

여기에 이미지 설명을 입력하십시오

오픈 소스 크로스 플랫폼 비주얼 디버거.

설치:

npm install iron-node -g;

디버그 :

iron-node yourscript.js;



15

Chrome 버전 67.0.3396.62 (+) 사용

  1. 노드 앱 실행

node --inspect-brk = 0.0.0.0 : 9229 server.js (서버 JS 파일 이름)

  1. 크롬에서 앱 탐색 (예 : "localhost : port")
  2. DevTools를여십시오.
  3. 반응 형 장치 아이콘 옆에있는 노드 아이콘을 클릭하십시오.

여기에 이미지 설명을 입력하십시오

노드 앱 디버깅을 위해 특별히 나타나는 또 다른 DevTools 창이 있습니다.

여기에 이미지 설명을 입력하십시오


13

pry.js 라는 깔끔한 작은 도구를 만들었습니다 .

코드 어딘가에 간단한 문장을 넣고 스크립트를 정상적으로 실행하면 노드가 현재 스레드를 중단하여 모든 변수와 함수에 액세스 할 수 있습니다. 마음대로보고 / 편집 / 삭제하십시오!

var pry = require('pryjs')

class FizzBuzz

  run: ->
    for i in [1..100]
      output = ''
      eval(pry.it) // magic
      output += "Fizz" if i % 3 is 0
      output += "Buzz" if i % 5 is 0
      console.log output || i

  bar: ->
    10

fizz = new FizzBuzz()
fizz.run()





8

--inspect 플래그를 사용 하여 노드 프로세스를 시작하십시오 .

node --inspect index.js

그런 다음 chrome://inspect크롬으로 엽니 다 . "노드 전용 DevTools 열기"링크를 클릭하거나 설치 하십시오 Chrome DevTools를 쉽게 열 크롬 확장 프로그램을 .

자세한 내용은 링크를 참조하십시오


7

Node.js에 강력한 로깅 라이브러리가 필요한 경우 Tracer https://github.com/baryon/tracer 가 더 좋습니다.

타임 스탬프, 파일 이름, 메소드 이름, 라인 번호, 경로 또는 호출 스택과 함께 로그 메시지를 출력하고 컬러 콘솔을 지원하며 데이터베이스, 파일, 스트림 전송을 쉽게 지원합니다. 나는 저자입니다.


7

컴퓨터에 node-inspector가 설치되어 있다고 가정하면 (아니라면 'npm install -g node-inspector'만 입력하십시오) 실행하면됩니다.

node-inspector & node --debug-brk scriptFileName.js

그리고 커맨드 라인의 URI를 WebKit (Chrome / Safari) 브라우저에 붙여 넣습니다.


1
노드 인스펙터는 이미 언급되었습니다. 이 답변을 삭제 하시겠습니까?
Dan Dascalescu 2012





4

넷빈즈 IDE는 Node.js를 이후 지원했다 버전 8.1 :

<...>

새로운 기능 하이라이트

Node.js 애플리케이션 개발

  • 새로운 Node.js 프로젝트 마법사
  • 새로운 Node.js Express 마법사
  • 향상된 JavaScript 편집기
  • Node.js 애플리케이션 실행을위한 새로운 지원
  • Node.js 애플리케이션 디버깅을위한 새로운 지원.

<...>

추가 참조 :

  1. NetBeans Wiki / NewAndNoteworthyNB81 .
  2. 넷빈즈 IDE에서 Node.js를 익스프레스 앱, Geertjan 오라클 .

4

이 명령을 사용하십시오

DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect


3

자주 사용하는 브라우저 디버거로 작은 Node.js 스크립트를 디버깅하는 더 빠르고 더러운 방법 은 browserify 를 사용하는 것 입니다. 이 방법은 기본 I / O 라이브러리가 필요한 응용 프로그램에서는 작동하지 않지만 대부분의 작은 스크립트에는 충분합니다.

$ npm install -g browserify

이제 모든 var x = requires('x')통화를 requires.js파일 로 옮기고 다음을 실행하십시오.

$ browserify requires.js -s window -o bundle.js

(여기의 단점 requires은 모든 파일에서 파일 을 이동하거나 주석 처리해야한다는 것 입니다.)

bundle.jsHTML 파일에 다음과 같이 포함하십시오 .

<script type="text/javascript" src="bundle.js"></script>

이제 브라우저에 파일을로드 F12하고 viola : 브라우저에서 디버그를 누릅니다 .

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