Last Commit: 2024-01-06 17:50:27
views:
Node Dubug
本文的项目demo:https://github.com/Bert0324/node-debugger-demo
众所周知,跑在node平台上的js是解释型的语言,因此断点调试必须要基于node的debug protocol,而非直接基于cpu的指令集。
较为主流的debug方式如下:
console.log
兄弟们无须多言,对前端人员非常友好,与浏览器中调试一样,在代码中需要调试的地方直接写上,只是展示形式有所不同,在Node中是在终端命令行中打印。
这是最简单快速的调试手段,缺点也很明显,对原有代码入侵较大,在特定场景中使用较局限,而且不是同步的。
v8 Debugger Protocol
node-inspector即是基于此protocol。但是已经被v8 Inspector Protocol取代。
v8 Inspector Protocol
node提供了v8 Inspector Protocol,可以使用第三方的 Client/IDE 等监测和介入 Node(v8) 运行过程,进行调试。通过 websocket与 Client/IDE 交互,同时基于 Chrome/Chromium 浏览器的 devtools 提供了图形化的调试界面。
yarn legacy
open http://localhost:5858/json/list
- 打开devtoolsFrontendUrl
VScode支持
使用浏览器调试的确更符合前端的使用习惯,但是直接使用ide调试显然才是更高级的享受。这里用vscode做例子。
- 打开JavaScript Debug Terminal (新打开一个vscode window必须要重新打开一个新的jdt)
- attach breakpoints
yarn vscode
配合nodemon更显丝滑。
Typescript的node调试
针对ts的调试,有两种方案。
sourceMap的方式
在tsconfig.json上设置"sourceMap": true
。
yarn ts
使用ts-node
ts-node已经集成了debug的功能,通过ts-node可以直接在vscode上调试。
- 打开JavaScript Debug Terminal (新打开一个vscode window必须要重新打开一个新的jdt)
- attach breakpoints
yarn tsnode
Addition: 命令行的动态ts引入
#! /usr/bin/env node
require('ts-node').register({
typeCheck: true,
files: true,
});
require('./bin');