第六十五期:简述Chrome DevTool 调试Node 的基本原理

2022-07-15 10:40:14 浏览数 (1)

Chrome调试工具调试Node

我们知道通过node 的 --inspect 参数可以对Node 程序进行调试。

代码语言:javascript复制
node --inspect index.js

执行命令后,打开浏览器,并导航到 chrome://inspect界面,我们就可以对我们的Nodejs项目进行调试。

点击【Open dedicated DevTools for Node】Node专用调试工具,即可进行调试。

非常方便。

它是如何工作的?

我们其实并不需要知道Node调试工具的底层原理就可以使用这个工具。但是出于好奇,我们简单了解一下也好。

调试能力其实最终是由JavaScript的V8引擎提供的。当node 执行 --inspect标识时,V8侦听器会打开一个端口接收WebSocket链接。一旦链接建立完成,以JSON形式的数据包命令就会在侦听器和客户端之间来回发送。

【chrome-devtools://】是一个Chrome浏览器可以识别的特殊的协议。它可以加载调试工具的UI界面,但是调试工具是通过远程模式进行加载的(remote mode),这种模式通过chrome-devtools://URI 提供了一个websocket 端点。

websocket 链接允许侦听器和客户端之间进行双向通信,内部的侦听器的websocket服务完全有C语言进行编写,并且运行在单独的线程上,因此,当进程启动或暂停时,侦听器可以继续接收和发动命令。

为了达到控制级别,提供了Debug模式(暂停、步进、检查状态、VIEW CALLAST堆栈、LIVE编辑)V8操作贯穿于 C 的各种功能,可以控制FOW,并在适当的位置改变状态。

例如,假如我们设置断点,一旦遇到该行,则在C 级别的代码中,条件将匹配暂停事件循环(javascript线程的事件循环机制)的函数。然后,侦听器(Inspector)通过WebSocket连接向客户端发送一条消息,告诉客户端进程在特定行上暂停,客户端更新其状态。同样,如果用户选择单步执行某个函数,该命令将发送给侦听器(Inspector),侦听器(Inspector)可以简单地取消暂停并在适当的时间重新使用执行。

0 人点赞