前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >解放双手:如何在本地调试远程服务器上的Node代码

解放双手:如何在本地调试远程服务器上的Node代码

作者头像
IMWeb前端团队
发布于 2019-12-04 09:33:40
发布于 2019-12-04 09:33:40
1.8K00
代码可运行
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队
运行总次数:0
代码可运行

本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载

写在前面

谈到node断点调试,目前主要有三种方式,通过node内置调试工具通过IDE(如vscode)通过node-inspector,三者本质上差不多。本文着重点在于介绍 如何在本地通过node-inspector 调试远程服务器上的node代码

在进入主题之前,首先会对三种调试方式进行入门讲解,方便新手理解后面的内容。至于老司机们,可以直接跳到主题去。

方式一:内置debug功能

进入调试模式(在第1行断点)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
node debug app.js

进入调试模式(在第n行断点)

比如要在第3行断点。

方式一:通过debugger

方式二:通过sb(line)

执行下一步

通过next命令。

跳到下一个断点

通过cont命令。

查看某个变量的值

输入repl命令后,再次输入变量名,就可以看到变量对应的值。如果想继续执行代码,可以按ctrl+c退出。

添加/删除watch

  • 通过watch(expr)来添加监视对象。
  • 通过watchers查看当前所有的监视对象。
  • 通过unwatch(expr)来删除监视对象。

添加watch:

删除watch:

进入/跳出函数(step in、step out)

  • 进入函数:通过step或者s
  • 跳出函数:通过out或者o

示例代码如下,假设代码运行到logger(str);这一行,首先跳进函数内部,再跳出函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var nick = 'chyingp';
var country = 'China';

var str = nick + ' live in ' + country;

var logger = function(msg){
    console.log(msg); // 这里
    console.log('这行会跳过'); // 跳过这行
};

logger(str);  // 假设运行到这里,想要进入logger方法

console.log(str);

示例截图如下:

多个文件断点

通过setBreakpoint('script.js', 1), sb(...),在某个文件某一行添加断点。反正我是没成功过。。。怎么看都是bug。。。

重新运行

每次都退出然后node debug app.js相当烦。直接用restart

远程调试

比如远程机器ip是192.168.1.126,在远程机器上进入调试模式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost ex]# node --debug-brk app.js
Debugger listening on port 5858

然后,在本地机器通过node debug 192.168.1.126:5858连接远程机器进行调试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
node debug 192.168.1.126:5858

如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/tmp node debug 192.168.1.126:5858
connecting to 192.168.1.126:5858 ... ok
break in /tmp/ex/app.js:1
> 1 var Logger = require('./logger');
  2 
  3 Logger.info('hello');
debug> n
break in /tmp/ex/app.js:3
  1 var Logger = require('./logger');
  2 
> 3 Logger.info('hello');
  4 
  5 });

当然,还可以通过pid进行远程调试,这里就不举例。

参考:https://nodejs.org/api/debugger.html#debugger_advanced_usage

方式二:通过IDE(vscode)

首先,在vscode里打开项目

然后,添加调试配置。主要需要修改的是可执行文件的路径。

点击代码左侧添加断点。

开始调试

顺利断点,左侧的变量、监视对象,右侧的调试工具栏,用过chrome dev tool的同学应该很熟悉,不赘述。

方式三:通过node-inspector

首先,安装node-inspector

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install -g node-inspector

方式一:通过node-debug启动调试

启动调试,它会自动帮你在浏览器里打开调试界面。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
debugger git:(master) ✗ node-debug app.js
Node Inspector v0.12.8
Visit http://127.0.0.1:8080/?port=5858 to start debugging.
Debugging `app.js`

Debugger listening on port 5858

调试界面如下,简直不能更亲切。

方式二:更加灵活的方式

步骤1:通过node-inspector启动Node Inspector Server

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
debugger git:(master) ✗ node-inspector 
Node Inspector v0.12.8
Visit http://127.0.0.1:8080/?port=5858 to start debugging.

步骤2:通过传统方式启动调试。加入--debug-brk,好让代码在第一行断住。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
debugger git:(master) ✗ node --debug-brk app.js
Debugger listening on port 5858

步骤3:在浏览器里打开调试UI界面。就是步骤1里打印出来的地址 http://127.0.0.1:8080/?port=5858。成功

实现原理

从上面的例子不难猜想到。(不负责任猜想)

  • 通过node --debug-brk启动调试,监听5858端口。
  • node-inspector启动服务,监听8080端口。
  • 在浏览器里访问http://127.0.0.1:8080/?port=5858。可以看到port=5858这个参数。结合之前讲到的node内置远程调试的功能,可以猜想,在返回UI调试界面的同时,服务内部通过5858端口开始了断点调试。

另外,从下面截图可以看出,UI调试工具(其实是个网页)跟 inspector服务 之间通过websocket进行通信。

用户在界面上操作时,比如设置断点,就向 inspector服务 发送一条消息,inspector服务 在内部通过v8调试器来实现代码的断点。

可以看到,用到了v8-debug,这个就待深挖了。

通过node-inspector调试远程代码

细心的同学可能会发现,node远程调试其实在上面node-inspector章节的讲解里已经覆盖到了。这里还是来个实际的例子。

假设我们的node代码app.js运行在阿里云的服务器上,服务器ip是xxx.xxx.xxx.xxx

首先,服务器上启动node-inspector服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@iZ94wb7tioqZ ~]# node-inspector 
Node Inspector v0.12.8
Visit http://127.0.0.1:8080/?port=5858 to start debugging.

其次,通过--debug-brk参数,进入调试模式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@iZ94wb7tioqZ ex]# node --debug-brk app.js
Debugger listening on port 5858

最后,在本地通过ip地址愉快的访问调试界面。是不是很简单捏。

常见问题:安全限制

远程调试常见的问题就是请求被拒绝。这是服务器安全策略的限制。遇到这种情况,开放端口就完事了。

在我们的云主机上,默认安装了firewall-cmd,可以通过--add-port选项来开放8080端口的开放。如果本机没有安装firewall-cmd,也可以通过iptables来实现同样的功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@iZ94wb7tioqZ ex]# firewall-cmd --add-port=8080/tcp
success

然后,就可以愉快的远程调试了。

相关链接

Node Debugger

How Does a C Debugger Work?

How debuggers work: Part 2 - Breakpoints

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-09-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
用于调试和分析的 5 大 Node.js 工具
调试和分析是查找和修复错误、测量和优化性能,同时确保Node.js应用程序的质量和效率的重要过程。
泯泷、
2024/03/16
5050
用于调试和分析的 5 大 Node.js 工具
使用 Chrome Devtools 调试您的 Node.js 程序
俗话说:“工欲善其事,必先利其器”,调试是每一个开发人员都要遇到的问题,选择一个合适的调试工具也尤为重要。 在 Node.js 开发过程中除了万能的 console.log 之外,本节介绍一个 Node.js 与 Chrome Devtools 结合的调试工具,以后你可以选择使用浏览器来调试 Node.js 应用程序了。
五月君
2020/12/30
3.2K0
使用 Chrome Devtools 调试您的 Node.js 程序
解放双手:如何在本地调试远程服务器上的Node代码
本文主要介绍了如何使用Node.js内置的调试器,包括如何启动调试器、设置断点、查看变量、单步执行、进入函数、查看调用栈、设置监视点、查看调用堆栈、调试异步代码、使用console.log、使用source-map-support、使用debugger语法进行调试等。同时还介绍了如何通过IDE或者命令行进行调试,以及调试过程中常见的问题和解决方法。
IMWeb前端团队
2017/12/29
2.7K0
解放双手:如何在本地调试远程服务器上的Node代码
nodejs的调试debug
对于开发者来说,在开发应用程序的过程中,往往为了开发方便和解决bug需要借助于编程语言的调试功能。一般来说我们需要借助于强大IDE的调试功能来完成这项工作。nodejs也不例外。
程序那些事
2021/01/28
1.6K0
调试你的node.js程序(一)
使用node.js开发已经有一段时间了,最开始的调试是使用工具node-inspector;不过node-inspector已经很长一段时间不能用了。 现在要调试node.js程序需要使用新的方式。 新的调试的方式有很多种,本文将介绍一种简单直接的方式。
用户3158888
2019/05/29
1.1K0
简化的 eggjs debug
虽然有时console.log也会用,但是我可能会使用一些更好的日志工具,以前的log4,现在的eggjs提供的logger,良好的日志分级,有助于提高查询问题的效率,如今,就直接使用eggjs提供的内置logger对象了。今天,我们主要是来说一说Debug的事情。调试几乎是每一个程序员必备的技能,而选择合适的调试就能极大的提高工作效率,由于Node.js@6.3版本之后已经内置了调试器,因此也可以和Chrome DevTools结合起来使用,于是node-inspector就这样退出了历史舞台。
icepy
2019/06/24
9800
简化的 eggjs debug
Node.js 调试一路走来经历了什么
做为前端开发,想必大家都写过 Node.js 的代码,也大概率用 debugger 断点调试过。
神说要有光zxg
2022/06/06
6360
Node.js 调试一路走来经历了什么
node应用远程调试教程
所谓远程调试,是指在本地IDE或命令行即时调试服务端代码,这在预发环境的测试阶段可以使用。远程调试避免了服务端环境的模拟,可快速定位bug。
欲休
2019/05/17
4550
Node.js 调试大法 : v8_inspector
Gcaufy
2017/05/18
2.2K0
Node.js 调试大法 : v8_inspector
使用node-inspector调试nodejs程序<nodejs>
1.npm install -g node-inspector  // -g 导入安装路径到环境变量 一般是c盘下AppData目录下 2.node-inspector & //启动node-ins
用户1148881
2018/01/17
6740
使用node-inspector调试nodejs程序<nodejs>
node-inspector调试工具应用
一、起因 想调试某些开源的nodejs项目,然后就选择了node-inspector插件。 他的优点: 1.可以借用chrome或firefox浏览器进行调试,与前端调试融合。 2.配置简单 二、必备工具 1.node-inspector 安装命令:npm install –save-dev node-inspector 三、编写需要测试代码 本例代码如下(文件名为app.js): var http = require('http'); var cHttp = http.createServer(funct
sam dragon
2018/01/17
8230
node-inspector调试工具应用
Node 调试工具入门教程
JavaScript 程序越来越复杂,调试工具的重要性日益凸显。客户端脚本有浏览器,Node 脚本怎么调试呢? 2016年,Node 决定将 Chrome 浏览器的"开发者工具"作为官方的调试工具,使
ruanyf
2018/04/12
8580
Node 调试工具入门教程
如何调试nodejs
使用node-inspector来调试node 安装 npm install -g node-inspector 启动 启动要调试的项目: node --debug 文件名 启动node-inspec
前端GoGoGo
2018/08/27
8880
从Javascript到Typescript到Node.js
最近看了点typescript的东西,加上以前看过的一点点Node.js,所以就想把他们系统地整理一下。
owent
2018/08/01
2.4K0
Chrome DevTools 远程调试协议分析及实战
Chrome DevTools 可以说是前端开发最常用的工具,无论是普通页面、移动端 webview、小程序、甚至 node 应用,都可以用它来调试。
winty
2020/04/26
7.5K0
Chrome DevTools 远程调试协议分析及实战
为你揭开 node.js 调试面纱
最近在写公司内部的一个 node 应用的时候,发现自己在 node 调试这块还是比较薄弱的,特意恶补了一下,在这里也做一下分享。
coder_koala
2019/12/06
1.2K0
为你揭开 node.js 调试面纱
调试 node.js 程序
在程序开发中,如何快速的查找定位问题是一项非常重要的基本功。在实际开发过程中,或多或少都会遇到程序出现问题导致无法正常运行的情况,因此,调试代码就变成了一项无法避免的工作。这里简单介绍下如何调试 node.js 程序。
用户6167509
2020/04/08
3K0
Vue笔记:使用 VS Code 断点调试
直接在 Chrome 的调试窗口中调试 Vue 代码有诸多不便, 好在 Visual Studio Code 中提供了 Debugger for Chrome 插件,能够通过配置直接在 VS Code 断点调试代码, 并且在 VS Code 的调试窗口看到 Chrome 中 console 相同的值,这篇文章就来介绍一下这个配置过程。
朝雨忆轻尘
2019/06/19
3K0
Vue笔记:使用 VS Code 断点调试
关于 Node.js 调试,你需要了解的一切
Node.js 是一种颇具人气的 JavaScript 运行时,与谷歌 Chrome 浏览器一样采用同款 V8 引擎。
深度学习与Python
2023/09/08
4810
关于 Node.js 调试,你需要了解的一切
Node.js 项目调试指南
Node.js 是一种流行的 JavaScript 运行时,与谷歌 Chrome 浏览器使用相同的 V8 引擎。它是跨平台的,在创建 Web 服务器、构建工具、命令行工具等方面越来越受欢迎。
ConardLi
2023/08/23
7680
Node.js 项目调试指南
相关推荐
用于调试和分析的 5 大 Node.js 工具
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文