详解如何在vscode里面调试js和node.js的方法步骤

小编 2026-07-08 阅读:1271 评论:0
在开发的过程中,几乎不可能一次性就能写出毫无破绽的程序,断点调试代码是一个普遍的需求。 作为前端开发工程师,以往我们开发的JavaScript程序都运行在浏览器端,利用Chrome提供的开发者工具就可以方便的进...

在开发的过程中,几乎不可能一次性就能写出毫无破绽的程序,断点调试代码是一个普遍的需求。

作为前端开发工程师,以往我们开发的JavaScript程序都运行在浏览器端,利用Chrome提供的开发者工具就可以方便的进行源码断点调试。其步骤有四,详情不表,粗略概括如下:

1.打开Chrome开发者工具;
2.点击进入Sources标签页,在页面的左侧就能看到JS代码的目录;
3.找到需要设置断点的源文件,在需要中断的哪行代码左侧单击鼠标左键,就可以设置断点,如果你的代码是uglify过的,则需导入相应的source-map来映射源码。
4.刷新页面(如果设置断点的位置是一个事件处理函数,则直接触发这个事件即可),代码运行到断点处的时候,程序就会挂起,这时候用鼠标hover就可以查看当前各个变量的数值,并以此判断程序是否正常运行了。

但是,当我们用JavaScript开发运行在服务端的Node.js程序时,Chrome开发者工具暂时派不上用场了。虽然也有办法实现在Chrome上调试,不过这不是今天我们讨论的范围。

还有,说用console.log的那位同学,请你先不要说话…

实际上,许多IDE都集成了Debug的功能,包括较新版本的WebStorm就对Node.js调试支持得很好。

但是很多开发人员会觉得IDE太重,有没有更轻量级一些的工具来实现断点调试呢?今天就要给大家安利一下在VScode上进行断点调试的方法。

一般大家调试都是在浏览器端调试js的,不过有些时候也想和后台一样在代码工具里面调试js或者node.js,下面介绍下怎样在vscode里面走断点。

1,用来调试js

一:在左侧扩展中搜索Debugger for Chrome并点击安装:

\"\"

二:在自己的html工程目录下面点击f5,或者在左侧选择调试按钮

\"\"

,在上方

\"\"

,选择下拉按钮,会有一个添加,选择chrome

\"\"

3:之后会出现laungh.json的配置文件在自己的项目目录下面

\"\"  

4:不过对于不同的代码文件要调试的话,每次都需要修改一下配置文件

{
  \"version\": \"0.2.0\",
  \"configurations\": [{
      \"type\": \"chrome\",
      \"request\": \"launch\",
      \"name\": \"Launch Chrome against localhost\",
      \"url\": \"http://localhost:8080\",
      \"webRoot\": \"${workspaceRoot}\"
    },
    {
      \"type\": \"chrome\",
      \"request\": \"attach\",
      \"name\": \"Attach to Chrome\",
      \"port\": 9222,
      \"webRoot\": \"${workspaceRoot}\"
    },
    {
      \"name\": \"Launch index.html (disable sourcemaps)\",
      \"type\": \"chrome\",
      \"request\": \"launch\",
      \"sourceMaps\": false,
      \"file\": \"${workspaceRoot}/jsTest/test1/test1.html\" #每次需要修改这里的文件地址
    }
  ]
}

5:到这里就可以进行调试了,在

\"\"

中选择 Launch index.html (disable sourcemaps) 调试项,按f5调试,会出现,同时打开goole浏览器,点击

\"\"

,即可进入调试阶段

2,用来调试node.js

调试nodejs有很多方式,可以看这一篇 https://blog.risingstack.com/how-to-debug-nodej-js-with-the-best-tools-available/

其中我最喜欢使用的还是V8 Inspector和vscode的方式。

在vscode中,点击那个蜘蛛的按钮

\"\"

就能看出现debug的侧栏,接下来添加配置

\"\"

选择环境

\"\"

就能看到launch.json的文件了。

\"\"

启动的时候,选择相应的配置,然后点击指向右侧的绿色三角

\"\"

launch模式与attach模式

{
 \"version\": \"0.2.0\",
 \"configurations\": [
  {
   \"type\": \"node\",
   \"request\": \"launch\",
   \"name\": \"Launch Program\",
   \"program\": \"${workspaceRoot}/index.js\"
  },
  {
   \"type\": \"node\",
   \"request\": \"attach\",
   \"name\": \"Attach to Port\",
   \"address\": \"localhost\",
   \"port\": 5858
  }
 ]
}

当request为launch时,就是launch模式了,这是程序是从vscode这里启动的,如果是在调试那将一直处于调试的模式。而attach模式,是连接已经启动的服务。比如你已经在外面将项目启动,突然需要调试,不需要关掉已经启动的项目再去vscode中重新启动,只要以attach的模式启动,vscode可以连接到已经启动的服务。当调试结束了,断开连接就好,明显比launch更方便一点。

在debug中使用npm启动

很多时候我们将很长的启动命令及配置写在了package.json的scripts中,比如

\"scripts\": {
 \"start\": \"NODE_ENV=production PORT=8080 babel-node ./bin/www\",
 \"dev\": \"nodemon --inspect --exec babel-node --presets env ./bin/www\"
},

我们希望让vscode使用npm的方式启动并调试,这就需要如下的配置

{
 \"name\": \"Launch via NPM\",
 \"type\": \"node\",
 \"request\": \"launch\",
 \"runtimeExecutable\": \"npm\",
 \"runtimeArgs\": [
  \"run-script\", \"dev\"  //这里的dev就对应package.json中的scripts中的dev
 ],
  \"port\": 9229  //这个端口是调试的端口,不是项目启动的端口
},

在debug中使用nodemon启动

仅仅使用npm启动,虽然在dev命令中使用了nodemon,程序也可以正常的重启,可重启了之后,调试就断开了。所以需要让vscode去使用nodemon启动项目。

{
 \"type\": \"node\",
 \"request\": \"launch\",
 \"name\": \"nodemon\",
 \"runtimeExecutable\": \"nodemon\",
 \"args\": [\"${workspaceRoot}/bin/www\"],
 \"restart\": true,
 \"protocol\": \"inspector\",  //相当于--inspect了
 \"sourceMaps\": true,
 \"console\": \"integratedTerminal\",
 \"internalConsoleOptions\": \"neverOpen\",
 \"runtimeArgs\": [  //对应nodemon --inspect之后除了启动文件之外的其他配置
  \"--exec\",
  \"babel-node\",
  \"--presets\",
  \"env\"
 ]
},

注意这里的runtimeArgs,如果这些配置是写在package.json中的话,就是这样的

nodemon --inspect --exec babel-node --presets env ./bin/www

这样就很方便了,项目可以正常的重启,每次重启一样会开启调试功能。

可是,我们并不想时刻开启调试功能怎么办?

这就需要使用上面说的attach模式了。

使用如下的命令正常的启动项目

nodemon --inspect --exec babel-node --presets env ./bin/www

当我们想要调试的时候,在vscode的debug中运行如下的配置

{
 \"type\": \"node\",
 \"request\": \"attach\",
 \"name\": \"Attach to node\",
 \"restart\": true,
 \"port\": 9229
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表