>  기사  >  웹 프론트엔드  >  Node.js 프로그램을 디버깅하는 빠르고 쉬운 방법

Node.js 프로그램을 디버깅하는 빠르고 쉬운 방법

青灯夜游
青灯夜游앞으로
2020-08-31 10:16:472397검색

Node.js 프로그램을 디버깅하는 빠르고 쉬운 방법

프로그램을 디버깅할 때는 항상 다양한 문제가 발생합니다. Node.js의 비동기식 워크플로는 이 힘든 프로세스에 복잡성을 더합니다. V8 엔진이 비동기 스택 추적에 대한 액세스를 용이하게 하기 위해 일부 업데이트를 수행했지만 대부분의 경우 프로그램의 메인 스레드에서만 오류가 발생하므로 디버깅이 다소 어려워집니다. 마찬가지로 Node.js 프로그램이 충돌할 때 코어 덤프를 분석하기 위해 정교한 CLI 도구에 의존해야 하는 경우가 많습니다. 이 글에서는 Node.js 프로그램을 디버그하는 몇 가지 쉬운 방법을 소개하겠습니다. [동영상 튜토리얼 추천 :

node js tutorial

]Logging

물론 로그를 제공하지 않는 개발 툴박스는 없습니다. 우리는 로컬 개발에서 코드 전체에 console.log 문을 배치하는 경향이 있지만 이는 프로덕션에서 실제로 확장 가능한 전략은 아닙니다. 중요한 정보를 식별하려면 필터링 및 정리를 수행하거나 일관된 로깅 전략을 구현해야 할 수도 있습니다.

적절한 로그 지향 디버깅 전략을 구현하려면 Pinoconsole.log 语句,但这并不是生产中真正可扩展的策略。你可能需要进行一些过滤和清理,或者实施一致的日志记录策略,以便从中识别出重要的信息。

要实施适当的面向日志的调试策略,可以用 PinoWinston 之类的日志记录工具。这些将允许你设置日志级别(INFOWARNERROR),它们允许你在本地打印详细的日志消息,同时在生产环境下仅打印严重的日志消息。你还可以将这些日志流式传输到聚合器或其他地方,例如 LogStash,Papertrail 甚至 Slack。

使用 Node Inspect 和 Chrome DevTools

日志记录只能使我们了解程序为何无法按预期运行。对于复杂的调试,我们将希望使用断点来检查代码在执行时的行为。

为此,可以使用 Node Inspect。 Node Inspect 是 Node.js 附带的调试工具。它实际上只是程序的 Chrome DevTools 的实现,可让你添加断点、控制分步执行、查看变量、并遵循调用堆栈。

有两种方法启动 Node Inspect,但最简单的方法可能就是使用 --inspect-brk 标志来调用 Node.js 应用程序:

$ node --inspect-brk $your_script_name

Node.js 프로그램을 디버깅하는 빠르고 쉬운 방법

启动程序后,前往 Chrome 浏览器中的 chrome://inspect 또는 Winston 및 기타 로깅 도구. 이를 통해 로그 수준(INFO, WARN, ERROR)을 설정할 수 있으며, 작업 중에 자세한 로그 메시지를 로컬로 인쇄할 수 있습니다. 프로덕션 환경에서는 중요한 로그 메시지만 인쇄합니다. 또한 이러한 로그를 수집자 또는 LogStash, Papertrail 또는 Slack과 같은 다른 곳으로 스트리밍할 수도 있습니다.

Node Inspect 및 Chrome DevTools를 사용하면 프로그램이 예상대로 실행되지 않는 이유를 이해할 수 있습니다. 복잡한 디버깅의 경우 중단점을 사용하여 코드가 실행될 때 어떻게 작동하는지 검사할 수 있습니다.

이를 위해 Node Inspect를 사용할 수 있습니다. Node Inspect는 Node.js와 함께 제공되는 디버깅 도구입니다. 실제로 중단점을 추가할 수 있는 Chrome DevTools

의 구현일 뿐입니다. , 단계별 실행을 제어하고, 변수를 보고, 호출 스택을 따릅니다.

Node Inspect를 시작하는 방법에는 두 가지가 있지만 아마도 가장 쉬운 방법은 --inspect-brk 플래그를 사용하여 Node.js 애플리케이션을 호출하는 것입니다: rrreee span >

프로그램을 실행한 후 Chrome 브라우저에서 chrome://inspect URL로 이동하여 Chrome DevTools에 들어갑니다. Chrome DevTools를 사용하면 브라우저에서 JavaScript를 디버깅하는 데 필요한 모든 것이 제공됩니다. 가장 유용한 기능은

메모리 확인 기능

입니다.

힙 스냅샷을 찍고Node.js 프로그램을 디버깅하는 빠르고 쉬운 방법 메모리 사용량을 구성하여 메모리 할당 방법과 메모리 누수 가능성을 이해할 수 있습니다.

지원되는 IDE 사용많은 최신 IDE에는 어떤 방식으로든 프로그램을 시작할 수 있을 뿐만 아니라 노드 프로그램 디버깅도 지원됩니다. Chrome DevTools에 있는 많은 기능 외에도

로그 포인트 생성🎜 기능, 여러 디버그 프로필 생성 기능과 같은 자체 기능도 함께 제공됩니다. 🎜Node.js Guide to Inspector Clients🎜를 확인하여 이러한 IDE에 대한 자세한 정보를 얻을 수 있습니다. 🎜🎜NDB 사용🎜🎜🎜🎜🎜또 다른 옵션은 격리된 로컬 디버거처럼 브라우저의 DevTools와 유사한 Node.js용 독립형 디버거인 🎜ndb🎜를 설치하는 것입니다. 또한 DevTools에서는 사용할 수 없는 몇 가지 추가 기능도 있습니다. 로컬 편집을 지원합니다. 즉, 코드를 수정하고 디버거 플랫폼에서 직접 지원하는 업데이트된 로직을 얻을 수 있습니다. 이는 빠른 반복에 적합합니다. 와🎜

사후 디버깅

심각한 오류(예: 메모리 액세스 오류)로 인해 프로그램이 충돌한다고 가정해 보세요. 이러한 경우는 드물지만 발생합니다. 특히 애플리케이션이 네이티브 코드에 의존하는 경우 더욱 그렇습니다.

이러한 유형의 문제를 조사하려면 llnode를 사용할 수 있습니다. 프로그램이 충돌하면 llnode는 JavaScript 스택 프레임과 개체를 C/C++ 측 개체에 매핑하여 검사할 수 있습니다. 이를 사용하려면 먼저 프로그램의 코어 덤프가 필요합니다. 이렇게 하려면 process.exit 대신 process.abort를 사용하여 코드에서 프로세스를 닫아야 합니다. process.abort를 사용하면 노드 프로세스가 종료될 때 코어 덤프 파일을 생성합니다. llnode 可以通过将 JavaScript 堆栈框架和对象映射到 C/C++ 端的对象来检查它们。为了使用它,你首先需要程序的核心转储。为此你需要使用 process.abort 而不是process.exit 来关闭代码中的进程。当你使用 process.abort 时,Node 进程在退出时会生成一个核心转储文件。

为了更好地理解 llnode 可以提供的功能,这个视频演示了其一些功能

有用的 Node 模块

除了上述所有以外,还建议用第三方软件包做进一步调试。

debug

第一个被简单地称为 debug。使用 debug,你可以基于函数名或整个模块为日志消息分配特定的命名空间。然后可以通过特定的环境变量选择将哪些消息打印到控制台。

例如,这是一个 Node.js 服务器,它正在记录来自整个程序和中间件栈的几条消息,例如 sequelizeexpress:applicationexpress:router

Node.js 프로그램을 디버깅하는 빠르고 쉬운 방법

如果我们将 DEBUG 环境变量设置为 express:router 并启动相同的程序,则仅显示标记为 express:router 的消息:

Node.js 프로그램을 디버깅하는 빠르고 쉬운 방법

通过以这种方式过滤消息,可以深入研究程序单个部分的行为方式,而无需大幅度更改代码的日志记录。

trace  与 clarify

traceclarify 两个模块最好在一起配合使用。

trace 通过提供有关被调用的异步方法的更多详细信息来扩展你的异步栈跟踪,这是 Node.js 默认不提供的路线图。 clarify

llnode가 제공할 수 있는 내용을 더 잘 이해하려면 이 동영상에서 보여줍니다. 일부 기능

.

유용한 노드 모듈

위의 모든 것 외에도 추가 디버깅을 위해 타사 패키지도 권장됩니다.

디버그


첫 번째는 간단히 디버그. 디버그를 사용하면 함수 이름이나 전체 모듈을 기반으로 로그 메시지에 특정 네임스페이스를 할당할 수 있습니다. 그런 다음 콘솔에 인쇄되는 메시지는 특정 환경 변수를 통해 선택할 수 있습니다. 🎜🎜예를 들어, 이는 sequelize, express:application와 같은 전체 프로그램 및 미들웨어 스택에서 여러 메시지를 로깅하는 Node.js 서버입니다. 익스프레스:라우터:🎜🎜 4 .png🎜🎜DEBUG 환경 변수를 express:router로 설정하고 동일한 프로그램을 시작하면 express:router 태그가 지정된 메시지만 표시됩니다. 🎜🎜🎜🎜통과된 필터링 메시지 이 방법을 사용하면 코드 로깅을 크게 변경하지 않고도 프로그램의 개별 부분이 어떻게 작동하는지 자세히 알아볼 수 있습니다. 🎜

추적 및 명확화

🎜
Trace🎜와 clarify🎜는 함께 사용하는 것이 가장 좋습니다. 🎜🎜trace 호출되는 비동기 메서드에 대한 자세한 내용을 제공하여 비동기 스택 추적을 확장합니다. 이는 Node.js가 기본적으로 제공하지 않는 로드맵입니다. 명확화는 Node.js 내부와 관련된 스택 추적에서 모든 정보를 제거하여 도움을 줍니다. 이를 통해 프로그램에 대한 함수 호출에만 집중할 수 있습니다. 🎜🎜이 모듈은 프로덕션 환경에서 실행하지 않는 것이 좋습니다! 로컬 개발 환경에서 디버깅할 때만 활성화해야 합니다. 🎜🎜더 많은 프로그래밍 관련 지식을 보려면 🎜프로그래밍 교육🎜을 방문하세요! ! 🎜🎜

위 내용은 Node.js 프로그램을 디버깅하는 빠르고 쉬운 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제