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)可以简单地取消暂停并在适当的时间重新使用执行。