Node.js プログラムをデバッグするための迅速かつ簡単な方法

青灯夜游
リリース: 2020-08-31 10:30:06
転載
2258 人が閲覧しました

Node.js プログラムをデバッグするための迅速かつ簡単な方法

在调试程序时总是会遇到各种挑战。 Node.js 的异步工作流为这一艰巨的过程增加了额外的复杂性。尽管 V8 引擎为了方便访问异步栈跟踪进行了一些更新,但是在很多数情况下,我们只会在程序主线程上遇到错误,这使得调试有些困难。同样,当我们的 Node.js 程序崩溃时,通常需要依靠一些复杂的 CLI 工具来分析核心转储

在本文中,我们将介绍一些调试 Node.js 程序的简便方法。【视频教程推荐:node js教程 】

日志记录

当然,没有哪一个开发工具箱是不提供日志的。我们倾向于在本地开发中的整个代码中放置 console.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 URL 进入 Chrome DevTools。借助 Chrome DevTools,你可以拥有在浏览器中调试 JavaScript 时的所有功能。最有用的功能是检查内存的能力。你可以获取堆快照并配置内存使用情况,以了解内存的分配方式以及可能的方式及内存泄漏的情况。

使用受支持的IDE

许多现代 IDE 不但能够以某种方式启动程序,而且还支持调试 Node 程序。除了具有 Chrome DevTools 中的许多功能外,它们还具有自己的功能,例如可以创建日志点并允许你创建多个调试配置文件。可以通过查阅有关检查器客户端的 Node.js 指南来获取有关这些 IDE 的更多信息。

使用NDB

Node.js プログラムをデバッグするための迅速かつ簡単な方法

另一种选择是安装 ndb,它是 Node.js 的独立调试器,和浏览器中的 DevTools 类似,就像一个隔离的本地调试器一样。它还有一些在 DevTools 中不可用的额外功能。它支持本地编辑,这意味着你可以修改代码并得到调试器平台直接支持的更新逻辑。这对于进行快速迭代非常有用。w

事後デバッグ

致命的なエラー (メモリ アクセス エラーなど) が原因でプログラムがクラッシュしたとします。このようなことはまれですが、特にアプリケーションがネイティブ コードに依存している場合には発生します。

このタイプの問題を調査するには、llnode を使用できます。プログラムがクラッシュすると、llnode は JavaScript スタック フレームとオブジェクトを C/C 側のオブジェクトにマッピングすることで検査できます。これを使用するには、まずプログラムのコア ダンプが必要です。これを行うには、process.exit の代わりに process.abort を使用して、コード内のプロセスを閉じる必要があります。 process.abort を使用すると、ノード プロセスは終了時にコア ダンプ ファイルを生成します。

llnode が提供できるものをよりよく理解するために、このビデオではその機能の一部を紹介します

便利なノード モジュール

上記のすべてに加えて、さらにデバッグするにはサードパーティのパッケージを使用することをお勧めします。

debug

最初のものは単に

debug と呼ばれます。デバッグを使用すると、関数名またはモジュール全体に基づいてログ メッセージに特定の名前空間を割り当てることができます。どのメッセージをコンソールに出力するかは、特定の環境変数を介して選択できます。

たとえば、これはプログラム全体とミドルウェア スタックからのいくつかのメッセージ (

sequelizeexpress:application、# など) をログに記録する Node.js サーバーです。 ##express:router:

Node.js プログラムをデバッグするための迅速かつ簡単な方法DEBUG 環境変数を

express:router

に設定して同じプログラムを起動すると、表示のみが行われます。 express:router:

Node.js プログラムをデバッグするための迅速かつ簡単な方法 タグが付いたメッセージ この方法でメッセージをフィルタリングすると、ログを記録しなくても、プログラムの個々の部分がどのように動作するかをドリルダウンできます。重要なコード変更。

trace と Clarify

trace

clarify は一緒に使用するのが最適です。

trace

呼び出される非同期メソッドに関する詳細を提供することで非同期スタック トレースを拡張します。これは、Node.js がデフォルトでは提供しないロードマップです。 clarify Node.js の内部に固有のスタック トレースからすべての情報を削除することで役立ちます。これにより、プログラムへの関数呼び出しのみに集中できます。 これらのモジュールは実稼働環境で実行することはお勧めできません。これらは、ローカル開発環境でデバッグする場合にのみ有効にする必要があります。

プログラミング関連の知識について詳しくは、

プログラミング教育

をご覧ください。 !

以上がNode.js プログラムをデバッグするための迅速かつ簡単な方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!