Node-调试模块Inspector

2020-01-15  本文已影响0人  杀死BUG

概要

主要通过实验性模块inspector实现手动开启关闭,修改调试接口以实现远程调试

说明

我们知道通过启动命令可以设置调试开启和关闭

node --inspect=191.168.1.15:9229 app.js

但是通常我们不会专门准备好一个调试接口针对每个进程,但是一旦遇到很难复现的问题就很抓瞎了。好在实现性模块inspector开通了设置调试接口的一些信息。

我们可以通过类似下面脚本实现手动动态配置

const SECRET = '45u90rjigjrihfngihghkbgh+jghg/af';

// 手动开启调试接口-通过http协议开启
function inspector(req, resp, queryInfoDic) {
  if (resp.finished) {
    return;
  }
  // 参数校验权限
  if (!queryInfoDic.params.secret || queryInfoDic.params.secret.replace(/ /g, '+') !== SECRET) {
    resp.end('1');
    return;
  }
  const inspector = require('inspector');
  // 端口,地址,是否只是关闭
  let {port, host, close} = queryInfoDic.params;
  inspector.close();
  // 只关闭
  if (close) { 
    return resp.end(inspector.url());
  }
  // 分配端口
  if (port) {
    port = Number.parseInt(port);
  }
  if (!Number.isSafeInteger(port)) {
    port = 9229;
  }
  let args = [port];
  // 地址
  if (host) { // 一般是目标服务器的本地IP
    args.push(host);
  }
  inspector.open(...args);
  resp.end(inspector.url());
}

只需把此请求挂在http/ws服务器route上即可。

补充

云服务器一般调试的安全性起见我们都会选择host是内网IP,这就遭遇到远程调试不便的问题。

策略1 花钱

申请一台云服务器系统是windows系统,内网互通直接解决一切问题。

策略2 费事

做nginx代理转发对一个外网IP(23.434.355.34)的某个端口8800,做ws转ws到调试服务器内网IP+调试端口。
这样只是会每次都需要运维小弟弟给你临时开放端口。

上一篇 下一篇

猜你喜欢

热点阅读