0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

揭秘Chrome DevTools:从原理到自定义调试工具

京东云 来源:jf_75140285 作者:jf_75140285 2025-03-04 14:49 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

引言

Chrome DevTools 是前端开发者的必备工具,不仅可以用于调试 Chrome 网页,还支持 Android WebView、Roma (跨平台开发框架) 安卓&鸿蒙 等平台的调试。 作为最常用的调试工具之一,DevTools 不仅能快速定位问题,还能让我们深入了解调试的内部机制。本文将从原理、组成部分、CDP 协议以及自定义调试工具的实现, 带你全面认识 DevTools。

wKgZPGfGolKAd2yrAAGrSZIO2dM672.png

Android WebView Devtools adb调试过程

1. DevTools的组成与原理

1.1 DevTools组成部分

Chrome DevTools主要由以下几个部分组成:

•Frontend 前端界面:用户交互的界面,提供各种调试功能。

•Backend 后端服务:与浏览器内核通信(如Chromium、V8等),执行调试命令, 通过CDP与前端界面交互。

•CDP(Chrome DevTools Protocol):Chrome调试工具协议(JSON 格式的数据封装协议)。

wKgZO2fGolSAVMKYAAEBbMJliGE634.png

1.2 工作原理

DevTools 的核心是基于 Chrome DevTools Protocol (CDP), 工作原理可以简单概括为:前端界面通过CDP协议与浏览器内核通信,发送调试命令并接收调试信息。浏览器内核根据接收到的命令执行相应的操作,并将结果返回给前端界面。

2. CDP协议详解

2.1 什么是CDP协议?

CDP(Chrome DevTools Protocol)是Chrome DevTools与浏览器内核通信的协议。它基于WebSocket,允许开发者通过发送JSON格式的命令来控制浏览器行为,并获取调试信息。 通过 CDP,DevTools 能够实时与页面交互,实现断点调试、性能分析等功能。

2.2 CDP协议的核心特点

◦基于JSON-RPC:CDP协议使用JSON格式传输数据,简单易读。

◦双向通信:不仅调试器可以发送命令,浏览器也会主动推送事件(比如断点触发、网络请求完成)。

◦模块化设计:CDP协议分为多个模块(如DOM、Network、Runtime等),每个模块负责不同的功能。

2.3 CDP协议的主要功能

◦DOM操作和CSS:获取、修改DOM结构和CSS样式。

◦网络监控:监控网络请求和响应。

JavaScript调试:设置断点、单步执行、查看调用栈等。

◦性能分析:分析页面加载性能、JavaScript执行性能等。

◦内存管理:检查和分析内存使用情况,查找内存泄漏等。

2.4 CDP协议的工作流程

1.建立WebSocket连接:通过WebSocket与浏览器内核建立连接。

2.发送协议命令:前端界面发送JSON格式的命令。

3.执行协议命令:浏览器内核执行命令并返回结果。

4.接收结果:前端界面接收并显示结果。

3. 了解CDP传输协议信息

3.1 启动工具

启用协议日志,DevTools的设置中勾选“rotocol Montor

wKgZPGfGolWAHHGMAADg4FljUZw787.png

wKgZPGfGoliAW46nAAWdkAdKRM8809.png

刷新页面打开协议工具

wKgZO2fGoluAIIAFAAoRuQZImb4081.png

查看协议的主要内容,此时此刻就可以看到协议交互为JSON格式

wKgZO2fGol6ASF2OAAvrXSKS_68173.png

3.2 分析CDP内容

当我们点击代码左边设置断点后,可以看到前端(Devtools面板)请求内容:

wKgZPGfGomCALBOuAAHC63kyhOM063.png

以及后端返回结果:

wKgZO2fGomKAX4J9AAL4yE59CxQ481.png

4. 自定义调试工具

4.1 为何需要自定义调试工具?

1. DevTools 的局限性

针对网页设计:DevTools 是为网页开发设计的,其功能(如 DOM 检查、CSS 调试、网络请求分析等)主要围绕 HTML、CSS 和 JavaScript 展开。对于非网页应用(如自定义语言、桌面应用、嵌入式系统等),这些功能可能不适用。

无法直接调试非网页应用:DevTools 依赖于浏览器的运行时环境(如 V8 引擎)和 Chrome DevTools Protocol (CDP)。如果应用不是运行在浏览器中,或者使用了非 JavaScript 语言,DevTools 无法直接调试,比如 Roma 安卓和鸿蒙端在采用的App内嵌入V8引擎,因此无法直接调试。

2. 自定义调试工具的需求

支持自定义语言或框架:如果应用使用了自定义 DSL(领域特定语言)或其他编程语言(如 PythonC++ 等),需要开发专门的调试工具来支持这些语言的语法、运行时和调试功能。

特定领域的调试需求:某些应用场景(如物联网设备调试、定制与自身业务结合的开发调试工具等)可能需要特定的调试功能,而这些功能在 DevTools 中并不存在。

跨平台支持:可以为不同平台(例如 Roma AndroidiOSHarmony)开发统一的调试工具。

4.2 其中的技术挑战

除了CDP协议外还需要实现:

消息通道:调试工具需要在前端和后端之间建立可靠的消息通道,用于传输调试信息(如断点、变量值、调用栈等)。

运行时环境集成:对于非 JavaScript 语言,需要将调试模块集成到运行时环境中(如 V8 引擎、Python 解释器等),以支持断点、单步执行、变量检查等功能。

4.3 手搓自定义调试

基于CDP, 实现自定义调试工具:

wKgZPGfGomSAW9aBAApph27FdtI935.png

1. 建立 WebSocket 通信层: 与DevTools调试面板建立通信。

wKgZO2fGomaAXXqrAATPBZObN-A542.png

2. 完成浏览器Discovery协议:在浏览器中可以显示应用。

wKgZPGfGomiAAbFzAAMzeRrB8FU539.png

wKgZO2fGomyAFtD-AAO6CQLUDUQ706.png

3. 完善/转发CDP协议:

V8中已自带了inspector能力,对于代码的调试协议大多不需要我们处理,对于inspector外的协议需要单独处理,例如 Console、Page等。 其他语言库如未实现inspector,需要单独实现inspector部分,例如 QuickJS。

wKgZPGfGom-AZSJBAA9EYrn9z5I508.png

4. 处理/转发CDP协议:例如获取 设置断点、取消断点、发起网络请求。

实现每一个CDP协议消息的发送与相应,例如 setBreakpointByUrl 协议完成 接收DevTools设置断点到V8中。

wKgZO2fGonOAMLizABUNQ5qrqzg523.png

5. Devtools进行扩展:

基于CDP 定制自己的页面 或 自定义协议命令,比如Roma Android调试中可以输入 $Jue 调试当前页面信息,实现evaluate协议执行V8加载脚本代码。

wKgZPGfGonSAapAmAAGGDcs6-ak625.png

wKgZO2fGoniAedcjABV_vcN5Pho310.png

5. 为什么学习DevTools

深入理解调试原理

通过学习DevTools的调试实现原理,可以更深入地理解调试工具的工作机制,从而更好地利用这些工具进行调试。

自定义调试工具

自定义开发工具、设置断点、单步执行、查看调用栈等。

分析处理性能问题

分析页面加载性能、JavaScript执行性能、内存泄漏等。

自定义调试工具

掌握CDP协议后,可以开发自定义的调试开发工具,满足特定需求。比如自动化测试工具、性能分析工具等。



希望本文能为你带来启发,让你在调试的道路上越走越顺!

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Chrome
    +关注

    关注

    0

    文章

    346

    浏览量

    18990
  • CDP
    CDP
    +关注

    关注

    0

    文章

    22

    浏览量

    10437
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    无图形界面模式下自定义检查工具的应用

    此前文章已介绍 ANSA 中的自定义检查工具。本文将探讨该功能在无图形界面(No-GUI)模式下的应用,旨在满足标准化工作流程的需求,适用于需要高度自动化的前处理场景。通过集成自定义检查,用户可实现工作流程的高效自动化运行。
    的头像 发表于 11-30 14:13 332次阅读
    无图形界面模式下<b class='flag-5'>自定义</b>检查<b class='flag-5'>工具</b>的应用

    采用汇编指示符来使用自定义指令

    、采用.insn汇编指示符实现risc-v自定义指令。这种方式可以指定工具来选择寄存器,也可以自己选定寄存器。指令格式如下(引自gnu 汇编器手册): 演示案例可以查看芯来官方案例,这里
    发表于 10-28 06:02

    大彩讲堂:VisualTFT软件如何自定义圆形进度条

    VisualTFT软件如何自定义圆形进度条
    的头像 发表于 07-07 17:10 1242次阅读
    大彩讲堂:VisualTFT软件如何<b class='flag-5'>自定义</b>圆形进度条

    调试工具:Eclipse调试工具栏与窗口的深入分析

    摘要 :在嵌入式系统开发领域,高效的调试工具链对于项目的成功实施具有决定性意义。本文聚焦于 Eclipse 调试工具栏与窗口的功能特性,深入剖析其在嵌入式开发调试过程中的关键作用。以厦门国科安芯
    的头像 发表于 07-07 11:32 661次阅读
    <b class='flag-5'>调试工具</b>:Eclipse<b class='flag-5'>调试工具</b>栏与窗口的深入分析

    RT-Trace调试工具正式发布!

    5月20日,RT-Thread官方预售了首款调试工具RT-Trace,获得了开发者及企业用户的广泛关注与支持。RT-Trace调试工具结束预售阶段,即日起正式发布!RT-Trace是一款专为
    的头像 发表于 06-18 12:02 1242次阅读
    RT-Trace<b class='flag-5'>调试工具</b>正式发布!

    KiCad 中的自定义规则(KiCon 演讲)

    “  Seth Hillbrand 在 KiCon US 2025 上为大家介绍了 KiCad 的规则系统,并详细讲解了自定义规则的设计与实例。  ”   演讲主要围绕 加强 KiCad 中的自定义
    的头像 发表于 06-16 11:17 1549次阅读
    KiCad 中的<b class='flag-5'>自定义</b>规则(KiCon 演讲)

    HarmonyOS应用自定义键盘解决方案

    自定义键盘是一种替换系统默认键盘的解决方案,可实现键盘个性化交互。允许用户结合业务需求与操作习惯,对按键布局进行可视化重构、设置多功能组合键位,使输入更加便捷和舒适。在安全防护层面,自定义键盘可以
    的头像 发表于 06-05 14:19 1728次阅读

    LabVIEW运动控制(三):EtherCAT运动控制器的高效加工指令自定义封装

    LabVIEW高效加工指令自定义封装
    的头像 发表于 04-08 13:49 3293次阅读
    LabVIEW运动控制(三):EtherCAT运动控制器的高效加工指令<b class='flag-5'>自定义</b>封装

    如何添加自定义单板

    在开发过程中,用户有时需要创建自定义板配置。本节将通过一个实例讲解用户如何创建属于自己的machine,下面以g2l-test.conf为例进行说明。
    的头像 发表于 03-12 14:43 1119次阅读

    如何快速创建用户自定义Board和App工程

    概述自HPM_SDKv1.7.0发布开始,在HPM_ENV中新增了user_template文件夹,以方便用户快速创建自定义的Board和App工程。user_template是用户模板工程,用户
    的头像 发表于 02-08 13:38 1020次阅读
    如何快速创建用户<b class='flag-5'>自定义</b>Board和App工程

    CAN总线十万个为什么 | CAN自定义波特率有什么用?

    导读CAN总线通信中,波特率一致并不总能保证通信顺畅。本文将揭秘自定义波特率的原理和应用,探讨如何通过优化采样点和提高容忍度解决通信问题,助力工程师提升通信稳定性。通常情况下,CAN总线通信只需确保
    的头像 发表于 02-07 11:36 1127次阅读
    CAN总线十万个为什么 | CAN<b class='flag-5'>自定义</b>波特率有什么用?

    Altium Designer 15.0自定义元件设计

    电子发烧友网站提供《Altium Designer 15.0自定义元件设计.pdf》资料免费下载
    发表于 01-21 15:04 0次下载
    Altium Designer 15.0<b class='flag-5'>自定义</b>元件设计

    think-cell:自定义think-cell(四)

    C.5 设置默认议程幻灯片布局 think-cell 议程可以在演示文稿中使用特定的自定义布局来定义议程、位置和议程幻灯片上的其他形状,例如标题或图片。通过将此自定义布局添加到模板,您可以为整个组织
    的头像 发表于 01-13 10:37 894次阅读
    think-cell:<b class='flag-5'>自定义</b>think-cell(四)

    智能语音识别照明解决方案,平台自定义,中英切换

    智能语音识别照明方案引入NRK3502芯片,支持平台自定义,离线控制,中英双语切换。NRK3502具备高性能和灵活自定义能力,可推动智能照明革新,控制其他智能设备,为国际用户提供全方位智能生活体验。
    的头像 发表于 01-10 13:23 824次阅读
    智能语音识别照明解决方案,平台<b class='flag-5'>自定义</b>,中英切换

    think-cell;自定义think-cell(一)

    本章介绍如何自定义 think-cell,即如何更改默认颜色和其他默认属性;这是通过 think-cell 的样式文件完成的,这些文件将在前四个部分中进行讨论。 第五部分 C.5 设置默认议程幻灯片
    的头像 发表于 01-08 11:31 1264次阅读
    think-cell;<b class='flag-5'>自定义</b>think-cell(一)