📖
blog
  • README
  • JavaScript
    • 元素的宽高位置信息梳理
    • dom-align 源码浅析
    • Event Loop
    • 函数实参为对象时的陷阱
    • export 与 utils 方法书写规范
    • 手写 Promise 及相关代码理解
    • call,apply,bind 等函数的模拟实现
    • JavaScript继承
    • JavaScript 数据类型与类型判断
    • for..of 和 for..in 的区别
    • 写给自己看的 next 函数
    • JS 可选链与双问号
    • mouseenter 与 mouseover 事件的区别
    • Immutable相关知识
  • CSS
    • 不简单的 z-index
    • 两列布局,三列布局
    • CSS 居中方案整理
    • CSS 像素,设备像素,2倍图梳理
    • iconfont 的使用
  • Node JS
    • 实现简易的 express
  • React 核心知识点整理
    • 高阶组件
    • React 事件处理
    • React Hooks
    • React Context
  • React 状态管理
    • Redux 基础概念
    • Redux 中间件和异步操作
    • Redux Saga
    • Redux 只能有一个 store 对象嘛
  • React 开发实践
    • Ant Design Menu 组件的使用与深入
    • 讲讲吸顶效果与 react sticky
    • 基于 express,搭建 react 的开发环境
    • 通过 antd input 组件分析受控与非受控组件
    • DebounceClick 组件
    • react component Align 组件分析
    • React Portal 之事件冒泡
    • React Transition Group 源码浅析
    • React.cloneElement 父组件向子组件注入 props
    • 一次 Align 组件的问题记录
    • 如何知道子组件的类型
    • React Router 源码简单分析
    • React Redux 源码简单分析
  • Vue.js
    • Vue.js 概览
    • scoped 样式中的 deep
  • TypeScript 语法
    • 基础类型
    • 变量声明
    • 接口
    • 类
    • 函数
    • 泛型
    • 枚举
    • 类型推论
    • 类型兼容性
    • 高级类型
    • Symbol
    • 迭代器和生成器
    • 模块
    • 命名空间
    • JSX
  • 玩转 webpack
    • 第一章: webpack 与构建发展简史
    • 第二章:webpack基础用法
    • 第三章:webpack进阶用法
    • 第四章:编写可维护的 webpack 构建配置
    • 第五章:webpack构建速度和体积优化策略
    • 第六章:通过源代码掌握webpack打包原理
    • 第七章:编写Loader和插件
  • webpack 实践
    • 如何配置 output.library
  • 测试
    • 初识代码测试
    • Jest 中 如何测试 setTimeout
    • Jest Enzyme React 测试实践记录
  • WEB 开发,过往工作沉淀
    • Web安全(DVWA)
    • 内存泄露与事件移除的必要性
    • url to pdf api 与 服务部署踩坑记录
    • 前端调试指南
    • Markdown 转 email
    • github travis ci 自动部署
    • 浏览器缓存知识梳理
    • WEB 系统登录相关知识梳理
    • 将-Axios-请求参数和返回值进行格式化
    • source-map与源码调试
    • HTTPS
    • 使用 rollup 打造自己的 npm 包 (全流程)
    • father-build 是如何工作的
  • 书籍
    • 图解 HTTP 协议
    • 编写可维护的 JavaScript
    • 鸟哥的 Linux 私房菜
    • JavaScript Promise迷你书
  • Linux
    • vimtutor
    • CURL 使用指南
  • Nginx
    • 一次 nginx 分享
  • Git
    • Git Commit Message 须知
    • .gitignore 模板
    • git tag标签
  • 摄影
    • 摄影基础知识
    • 手机摄影从小白到大师
  • 翻译
    • log4js
    • log4js-node
    • 介绍GitLab上的CI/CD
    • 为GitLab Pages创建并调整GitLab CI/CD
    • 关于 rel=noopener
    • AngularJS 团队 Git 提交信息约定
    • JSON Schema
  • Lifehack
    • 20 个 Google 搜索 Tips 来高效使用 Google
    • 37 个高级 Google 搜索 Tips
Powered by GitBook
On this page
  • 1. 调试 nodejs(后端)
  • 1.1 示例配置
  • 1.2 --inspect
  • 1.3 命令行参数
  • 1.4 chrome://inspect
  • 2. 调试前端 React
  • 2.1 示例配置
  • 2.2 步骤
  • 3. 远程调试后端代码
  • 参考资料

Was this helpful?

  1. WEB 开发,过往工作沉淀

前端调试指南

1. 调试 nodejs(后端)

1.1 示例配置

.vscode/launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "launch programe",
      "program": "${workspaceFolder}/app.js"  // 指定入口文件
    },
  ]
}

其中 type, request, program 须配置正确。按f5进入调试模式:

此时 vscode terminal 打印:

/Users/jpsong/.nvm/versions/node/v8.9.4/bin/node --inspect-brk=20746 app.js Debugger listening on ws://127.0.0.1:20746/6e715eb9-7654-4125-8e3a-44b2729d5de5 Debugger attached.

即按f5等同于执行 node --inspect-brk=20746 app.js,(但是有区别,待会讲)。

1.2 --inspect

  • 当用 --inspect 启动nodejs应用时,会开启一个调试客户端进程,默认位于 127.0.0.1:9229

  • 安全问题,由于调试客户端进程能完全访问node的运行环境,这样就有可能通过端口植入恶意代码到node进程,因此在公网或内网环境下暴露调试端口是有危害的

  • 访问调试客户端的几种方式,node-inspect, chrome devtools 55+, vscode 1.10+

1.3 命令行参数

--inspect: 开启调试客户端,但是此时不能检测到 vscode打的断点(似乎没有理由能监听到), 会一直执行下去所以好像没啥用。 --inspect-brk: 开启调试客户端,同时在代码第一行就停止下来。所以在 vscode 里,按f5调试的参数是 --inspect-brk

// 指定host和端口 --inspect-brk=[host:port] --inspect=[host:port]

1.4 chrome://inspect

通过node --inspect-brk app.js,在浏览器中输入chrome://inspect,通过 Devices => Open Dedicated DevTools for Node或者 Target 进入调试页面。

通过以上配置再按f5进入调试模式,这种方式可以在vscode打断点(但是不能在浏览器中调试),可以在 vscode 中调试。

区别: 即 f5 与 --inspect-brk 的区别在于,f5由于在vscode中,所以可以在vscode中打断点。而 --inspect-brk 只能在 chrome-devtool中断点调试。

2. 调试前端 React

官方的解释是:如果已经在浏览器打开了应用,那么可能就不是用 "launch",因为已经存在浏览器实例了,这时候应该 "attach"。另一方面,如果是在本地server的环境下,应该用"launch".

简单解释:"launch"用于调试后端代码,"attach"用于调试前端代码,支持vscode断点,同时调试之前需要将该服务启动,并在浏览器中访问该URL,以便于'attach'到。

2.1 示例配置

{
  "version": "0.2.0",
  "configurations": [      // 支持任意多项配置, 会在按f5之后再进行选择
    {
      "type": "node",
      "request": "launch",
      "name": "launch programe",
      "program": "${workspaceFolder}/server/app.js"  
    },
    {
      "type": "chrome",
      "request": "attach",        // attach方式
      "name": "attach to chrome",
      "port":9222,                 // 该端口取决于你命令行启动浏览器时的参数, --remote-debugging-port=9222
      "url":"http://localhost:1234",  // 取决于在浏览器中打开的url,如果打开的url为http://localhost:1234/#/123,则该值也应该是http://localhost:1234/#/123
      "webRoot":"${workspaceFolder}"
    }
  ]
}

2.2 步骤

  1. 命令行启动浏览器 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222

  2. 配置 .vscode/launch.json

    {
    "version": "0.2.0",
    "configurations": [
     {
       "type": "chrome",
       "request": "attach",
       "name": "Attach to Chrome",
       "port": 9222,
       "url":"http://localhost:8080",
       "webRoot": "${workspaceFolder}"
     },
    ]
    }
  3. (可选)浏览器打开 http://localhost:9222/ 检查是否正常

  4. npm start 启动项目

  5. 在浏览器访问该项目,(确保attach之前,浏览器中已经存在窗口)

  6. vscode f5启动调试. (必须先启动浏览器再启动项目)。

3. 远程调试后端代码

前端代码的运行环境是浏览器,所以不存在远程调试前端代码的情况,毕竟前端代码都是下载到本地然后执行的。

node官方教程中提到有 --inspect=[host:port] 的参数, [host:port]是调试关键 ,下面是开启远程调试的步骤:

  1. 在远程服务器用以下命令启动服务 node --inspect=0.0.0.0:9229 app.js,即能允许该服务被远程调试。

  2. 在 chrome://inspect Device 中,在Discover network targets配置远程服务器的 IP+端口 如 10.12.32.21:9229,即,使得chrome能发现 10.12.32.21:9229。

  3. 即可在当前 remote target[10.12.32.21]中进入远程服务器的 dev tools 调试界面,可使用 ctrl shift p 快捷键搜索文件进行打断点。

此时无论是通过ip访问远程服务还是域名访问,均会触发该断点。

参考资料

Previousurl to pdf api 与 服务部署踩坑记录NextMarkdown 转 email

Last updated 4 years ago

Was this helpful?

查看 相关知识得知:

查看相关介绍: 首先在vscode下载 debugger for chrome 插件,然后配置 launch.json,其中 request字段有两种: launch 和 attach。

-- inspect,(包含远程调试)
vscode-debugger
node-debugger,--inspect参数,远程调试
vscode-debugger, launch与 attach
前端外刊评论,NODE调试指南