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

news/2025/3/4 14:53:00/文章来源:https://www.cnblogs.com/Jcloud/p/18750496

作者:京东科技 杜强强

引言

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

 

 

 

Android WebView Devtools adb调试过程

1. DevTools的组成与原理

1.1 DevTools组成部分

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

Frontend 前端界面:用户交互的界面,提供各种调试功能。
Backend 后端服务:与浏览器内核通信(如Chromium、V8等),执行调试命令, 通过CDP与前端界面交互
CDP(Chrome DevTools Protocol):Chrome调试工具协议(JSON 格式的数据封装协议)。

 


 

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

 

 

 

 

 

刷新页面打开协议工具

 

 

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

 

 

3.2 分析CDP内容

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

 

 

以及后端返回结果:

 

 

4. 自定义调试工具

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

1. DevTools 的局限性

针对网页设计:DevTools 是为网页开发设计的,其功能(如 DOM 检查、CSS 调试、网络请求分析等)主要围绕 HTML、CSS 和 JavaScript 展开。对于非网页应用(如自定义语言、桌面应用、嵌入式系统等),这些功能可能不适用。
无法直接调试非网页应用:DevTools 依赖于浏览器的运行时环境(如 V8 引擎)和 Chrome DevTools Protocol (CDP)。如果应用不是运行在浏览器中,或者使用了非 JavaScript 语言,DevTools 无法直接调试,比如 Roma 安卓和鸿蒙端在采用的App内嵌入V8引擎,因此无法直接调试。

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

支持自定义语言或框架:如果应用使用了自定义 DSL(领域特定语言)或其他编程语言(如 Python、C++ 等),需要开发专门的调试工具来支持这些语言的语法、运行时和调试功能。
特定领域的调试需求:某些应用场景(如物联网设备调试、定制与自身业务结合的开发调试工具等)可能需要特定的调试功能,而这些功能在 DevTools 中并不存在。
跨平台支持:可以为不同平台(例如 Roma Android\iOS\Harmony)开发统一的调试工具。

4.2 其中的技术挑战

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

消息通道:调试工具需要在前端和后端之间建立可靠的消息通道,用于传输调试信息(如断点、变量值、调用栈等)。
运行时环境集成:对于非 JavaScript 语言,需要将调试模块集成到运行时环境中(如 V8 引擎、Python 解释器等),以支持断点、单步执行、变量检查等功能。

4.3 手搓自定义调试

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

 

 

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

 

 

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

 

 

 

 

3. 完善/转发CDP协议:

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

 

 

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

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

 

 

5. Devtools进行扩展:

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

 

 

 

 

5. 为什么学习DevTools

深入理解调试原理

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

自定义调试工具

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

分析处理性能问题

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

自定义调试工具

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

 

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/893431.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

升级到Windows 11 24h2版本后惠普打印机报错spl error 11-1114 line 601

问题描述 近日升级到Windows 11 24h2版本后发现使用HP Laser MFP 1136w Printer打印文档皆会打出一页报错页面,内容如下图所示,但是使用HP Smart Assistant打印PDF一切正常,尝试了使用HP SMART进行修复,修改网络连接方式,重新添加打印机等等方式皆无果。解决方案 排查后发…

Outlook邮箱登录失败,0x80190001错误的多种解决方法

一、Outlook邮箱客户端“0x80190001”解决方法起初出现这个问题我以为是电脑有病毒了,无奈之下全盘杀毒仍然无法解决,随后开始搜索“0x80190001”相关问题查阅,试过好多办法依然无效,直到我找到以下方法:“win+s”打开搜索界面,找到“Internet选项”点击进入该项设置。在…

AUTOSAR网络管理自动化测试如何创建测试框架

在AUTOSAR网络管理自动化测试中,需求分析、模块化设计、自动化执行是创建测试框架的核心要点,其中模块化设计尤为关键,通过将复杂的网络管理功能拆分为独立模块,实现灵活扩展与维护;这不仅能提高测试效率,还能在多变的系统环境中保持稳定性。采用标准化的设计模式,并辅以…

jmeter中的while循环控制器中变量提取

${__javaScript(${status}==0)} ${__groovy(vars.get("status") == 0)}

docker compose部署nacos高可用集群,并开启账号密码

架构图 部署 一、准备yml文件、nacos sql初始化文件、nginx.conf文件 nacos sql初始化文件/** Copyright 1999-2018 Alibaba Group Holding Ltd.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in complian…

Flutter QQ聊天项目(1):登录界面实现

下面介绍 Flutter 最基本的通用项目框架搭建,顺便实现一个 QQ 聊天界面,这里只先实现了 QQ 登录界面。先看下效果图:一、运用技术编辑器:VS Code 框架技术:Flutter3.104 + Dart3.105 路由/状态管理:get^4.6.6更具体的:使用ScreenUtilInit自适应界面大小; 使用Stack支持…

PrivHunterAI:越权漏洞检测的工具

免责声明: 工具仅供安全研究与学习之用,若将工具做其他用途,由使用者承担全部法律及连带责任,作者及发布者不承担任何法律及连带责任。信息及工具收集于互联网,真实性及安全性自测!!​ 项目介绍 功能 一款通过被动代理方式调用Kimi、DeepSeek和通义千问AI,实现越权漏洞…

开启科创服务新篇章!八月瓜科技CRM数字化管理系统成功上线

近日,北京八月瓜科技有限公司(以下简称 “八月瓜科技”)与纷享销客达成深度战略合作,成功部署并上线CRM数字化管理系统。此次合作是八月瓜科技在数字化转型进程中的重要里程碑,标志着其在科技创新服务领域的数字化变革进程中迈出了坚实且具有战略意义的一步。 八月瓜科技是…

Feedalyze - 让你听得见、听得清用户的反馈

Feedalyze - 专注于用户反馈的管理分析工具,让你听得见、听得清用户的反馈!满足用户需求,解决用户问题,获得适当报酬是商业成功最为重要的因素。然而扪心自问,当您推出新产品后,您真的在听、听得见、听得清用户的反馈么? 当今信息传播迅猛,渠道繁多,优秀产品随口碑效应…

自己写一个下载器,速度堪比IDM下载器

心血来潮,想自己做个下载器,类似于腾讯的游戏高速下载器。类似下图这种,这样又可以接受客户定制喽。开干!解决单文件exe问题这类程序都会利用第三方的下载插件来提升下载速度,但是就会出现多个文件的问题,给人体验感就不好了。利用ILMerge将三方的插件都合并起来,顺利解…

文件下载方法

通用下载1 package com.stig.business.web.contoller;2 3 import com.stig.business.web.mobel.po.EbssFileInfo;4 import com.stig.common.constant.Constants;5 import com.stig.common.properties.BusStopSignProperties;6 import com.stig.common.utils.RedisUtils;7 impor…

Charles安装及使用教程

一. 简介及安装 一、charles的使用 1.1 charles的说明 Charles其实是一款代理服务器,通过过将自己设置成系统(电脑或者浏览器)的网络访问代理服务器,然后截取请求和请求结果达到分析抓包的目的。该软件是用Java写的,能够在Windows,Mac,Linux上使用。安装Charles的时候要…