当前位置: 首页 > 后端技术 > Node.js

调试Node.js的三种方法

时间:2023-04-03 12:51:07 Node.js

内置调试(Node检查器)Node.js包含一个进程外调试实用程序,可以通过V8检查器或内置调试客户端访问。开始:nodeinspect--port=[9229][nodeFile]单步执行cont,c:继续执行。next,n:进入下一行。step,s:单步进入。out,o:单步退出。pause:暂停正在运行的代码(类似于开发者工具中的暂停按钮)。BreakpointsetBreakpoint(),sb():在当前行设置断点。setBreakpoint(line),sb(line):在指定行设置断点。setBreakpoint('fn()'),sb(...):在函数体的第一条语句上设置断点。setBreakpoint('script.js',1),sb(...):在script.js的第一行设置断点。clearBreakpoint('script.js',1),cb(...):清除script.js中第一行的断点。infobacktrace,bt:打印当前执行帧的backtrace。list(5):列出脚本源代码的5行上下文(前后各5行)。watch(expr):将表达式添加到观察列表。unwatch(expr):从监视列表中删除表达式。watchers:列出所有观察者及其值(自动在每个断点上)。repl:打开调试器的repl以在被调试脚本的上下文中执行。execexpr:在调试脚本的上下文中执行表达式。执行控制运行:运行脚本(调试器启动时自动运行)。重新启动:重新启动脚本。kill:杀死脚本。杂项脚本:列出所有加载的脚本。version:显示V8的版本。运行命令行,终端提示错误:Timeout(2000)waitingfor127.0.0.1:9229tobefree。这不是端口被占用的问题,而是nodeinspect打开端口超时导致的bug。可以尝试升级node-inspect的版本,或者修改node.exe的超时配置。https://github.com/nodejs/nod...V8InspectorV8Inspector的集成允许将Chrome开发人员工具附加到Node.js实例以进行调试和分析。它使用Chrome开发者工具协议。Start:node--inspect[nodeFile]#Specifyportnode--inspect=[port][nodeFile]#在应用程序代码的第一行打断点node--inspect-brk[nodeFile]$node--inspect-brkdebug/index.jsDebugger监听ws://127.0.0.1:9229/1dc7da88-983c-4fbe-a8e3-2d5f256e98af有关帮助,请参阅:https://nodejs.org/en/docs/inspectorDebugger附件。开始调试:在Chrome浏览器地址栏输入chrome://inspect或about:inspect,回车即可看到如下界面。NIM每次调试Node.js都要打开这么深的隐藏入口,是不是很烦?幸运的是我们有NIM。NIM(NodeInspectorManager)是一个Chrome扩展,可以帮助我们快速打开DevTools,或者设置自动发现和打开DevTools。inspect-process如果你觉得NIM使用起来也很麻烦,那么你可能需要inspect-process。全局安装:npmiinspect-process-g命令:inspectapp.jsinspect-process会自动调用ChromeDevTools,然后定位到app.js,其余用法与ChromeDevTools一致。process._debugProcess如果没有加--inspect参数就已经启动了一个Node.js进程,我们又不想重启(场景会丢失)又想调试怎么办?这时候就可以使用process._debugProcess了。使用方法如下:使用ps命令或pgrep-nnode查看当前启动的Node.js进程的pid,例如:53911。斧头|grepapp.js打开一个新终端,运行:node-e"process._debugProcess(53911)",会打印出原来的Node.js进程:Debuggerlisteningonws://127.0.0.1:9229/2331fa07-32af-45eb-a1a8-珠7a0ab905。打开ChromeDevTools进行调试。nodeinspect和node--inspectnode--inspect的区别:调试app.js,但是暴露了远程调试接口,像vscode、Chromedevtools、Intellij等都可以附上。此外,app.js运行良好并且可以从终端完全控制。节点检查:与节点捆绑在一起的交互式CLI调试器。它可以替代可视化调试器,例如vscode或Chromedevtools。或者,CLI调试器可以使用node--inspect在单独的进程中启动脚本并附加到它。两者的关系在更多的流和跨机器远程调试的支持上更加明显:#启动app.js并暴露inspect接口,默认在端口9229:node--inspectapp.js#在一个单独的终端中,启动inspect客户端针对9229端口:nodeinspect-p9229node--inspectapp.js运行后,CLI调试器(nodeinspect连接到可用的调试接口进程(node--inspect)。VisualStudioCodeVscode编辑器调试是通过插件实现的,VSCode默认支持Node.js调试器,而JavaScript调试需要安装DebuggerforChrome插件,点击左侧栏的Extensions按钮,搜索DebuggerforChrome,点击安装,点击左栏运行按钮,打开调试栏,点击左栏上方配置按钮,打开laungh.json文件进行配置。{//使用IntelliSense了解可能的属性。//悬停以查看现有属性的描述。//更多信息,请访问:https://go.microsoft.com/fwlink/?linkid=830387"version":"0.2.0","configurations":[{"type":"node-launch","request":"launch","name":"LaunchNodeJs","skipFiles":["/**"],"program":"${workspaceFolder}\\nodeDemo\\debug\\index.js"},{"type":"node-attach","request":"attach","name":"AttachbyProcessID","processId":"${command:PickProcess}","skipFiles":["/**"]},{"name":"Launch15-canvas入门篇.html","type":"chrome","request":"launch","sourceMaps":假的,“文件”:“${工作区Root}\\htmlDemo\\15-canvasGettingStarted.html"}]}选择左栏上方对应的启动选项注:如果没有配置项,本地有index.js文件,则直接执行该文件.点击左栏顶部的startDebugging.Configurelaunch.jsonVSCode提供了一个调试接口,但是并没有统一调试配置,而是把它的自由度交给了调试器本身,我们在launch.json中写的debuggingconfiguration其实就是调试器的配置或者参数,不过它的格式是JSON。{"type":"node","request":"launch","name":"LaunchNodeJs","skipFiles":["/**"],"program":"${workspaceFolder}\\nodeDemo\\debug\\index.js"}type:必填,代表调试器的类型。它决定VS使用哪个调试插件code用于调试代码。具体取值如:node,chrome.request:required,代表如何启动调试器,有两个取值:launch和attach。前者是指VSCode会使用调试浏览器直接启动代码进行调试。后者表示你打开了程序,然后连接到Node.js的内部调试协议进行调试。名称:配置的名称。调试时,你可以在调试栏的顶部选择要运行的配置。program:告诉Node.js调试器我们要调试哪个文件。该值支持预定义参数,如:${file},即当前编辑器打开的文件;${workspaceFolder}表示当前工作区文件夹地址。MacOSorLinux写法:"program":"path/app.js"Windows平台指定具体写法:program":path\\app.js四个属性中type和request是VSCode预定义的属性,每个调试器插件都会以相同的方式读取和理解它的值;而名称和程序的定义和最终解释由调试插件控制,VSCode不对它们和处理施加任何约束。虽然每个调试器控制用户可以使用哪些属性,调试器之间还是有很多相似之处的,调试插件也经常使用相同的属性名来表示相同的功能。经常使用的有以下几种:程序一般用于指定要调用的文件debugged.stopOnEntry,启动调试器时是否暂停执行第一行代码。调试过程。cwd控制调试器的工作目录。port是用于调试的端口。参考链接节点调试指南节点调试工具入门教程VSCode代码调试器