首页 > 其他分享 >善用浏览器的一些调试技巧

善用浏览器的一些调试技巧

时间:2023-12-28 15:15:21浏览次数:20  
标签:__ 定位 vue 浏览器 善用 源码 断点 调试

$0 和 __vue__

$0 是指当鼠标点击 Element 面板的某个 dom 元素后,console 里 $0 变量会自动指向该 dom 元素对象

__vue__ 是指 vue 框架会往 vue 组件 $mount 挂载的 dom 元素对象上添加一个 __vue__ 变量来指向当前 vue 组件

这意味我们可以直接在 console 面板里拿到任意 vue 组件实例对象:

  • 可以查看对象内部任意属性
  • 也可以直接操作对象内部的属性来达到预期的调试效果
  • 甚至可以用来查看三方库的 api,比如 element-ui 的某个组件内部的 api

或许你会疑问,这不是安装 chrome 插件(vue devtools)就可以搞定的事吗,插件还是个可视化界面操作,更直观便捷

没错!插件当然更方便,但没准插件内部实现原理就是这样的呢,掌握这个技巧,也可以在一些插件无法覆盖的场景下来调试页面,比如:

  • 生产环境的页面
  • 内网部署且无法代理到本地的页面
  • 非 chrome 浏览器
  • 等等

举一反三:

  • 很多开源库框架其实都会往绑定的 dom 或者 window 上挂载一些变量上去,善于在 console 利用这些变量,可以方便我们进行很多非本地开发场景下的调试
  • 我们日常封装一些复杂业务、复杂组件时,也可以参考这种思路,给自己开一个非本地开发场景下的调试入口,但注意别内存泄漏了
  • window 上挂实例对象变量容易导致内存泄漏,所以建议挂一些全局作用域的对象;实例对象尽量挂与他生命周期绑定的 dom 对象

接口数据搜索定位

网络面板支持多个维度的搜索功能:

  • 根据内容关键词定位接口
    • 常用于看见界面某个文案或者只知道某个关键词,但想定位它是哪个接口返回时的场景
  • 在接口返回的内容里定位关键词
  • 根据 url 过滤接口

源码定位

jquery 时代的网页源码直接原原本本在浏览器上,调试和阅读都非常方便;

前端工程化后,混淆和压缩已经是标配,当出现生产故障时,首先考虑的应该是本地复现或者是将生成环境页面代理至本地的思路来解决;
但总会有某些场景,由于各种受限,只剩下浏览器直接操作的手段,因此,掌握一些源码定位和调试的方式技巧还是有必要的

全局搜索

字符串、对象属性字段名这些不会被混淆,可以借助这类场景的关键词来搜索定位源码位置
通常界面也是第一看到的东西,尽量找个界面上看着不像通用类的文案全局搜索下,基本都能定位到对应组件源码

也可以审查元素,在 Element 面板里找到对应 dom 上比较唯一的 class 或 id 等来全局搜索

接口调用栈

接口也是逻辑分析的入口点之一,比如找到某个页面呈现数据的请求接口,跟着调用栈走下去基本能梳理界面从拿到数据到呈现做了什么事
但要注意过滤掉三方库(如 axios, vue 等)对接口的封装,找到真实属于逻辑源码的调用栈

console 面板的函数源码跳转

console 面板上的 log 日志,或者通过 log 输出一个函数,都支持点击跳转到对应源码位置
借助 $0 和 __vue__ 变量,找到对应组件的某个方法入口,通过 log 输出方法再跳转至源码位置,就能针对性的梳理某个逻辑源码

事件监听事件跳转

对于某些按钮等组件的点击之类的事件,可以直接通过审查元素的 Element 面板的 EventListeners(事件监听器)这边查看到该按钮各类事件的监听器
过滤掉三方库的统一事件监听器,找到自己逻辑源码的事件监听器入口,也能针对性梳理该事件处理逻辑源码

源码调试

断点

代码里加入 debugger 可以触发断点,但前提是本地开发调试模式
也可以直接浏览器上操作断点,除了常规的直接点击源码断点之外,也可以使用一些具体场景的断点,比如定时器触发时进入断点、异步请求响应时断点,DOM 变更时断点等等

overrides(覆盖)

如果想在浏览器上修改源码并生效的话,需要使用到 overrides(覆盖|替换)功能,如上图
先在 Source(源代码/来源) 面板启用 overrides(替换) 功能,然后找到要编辑的源码文件,右键,点击替换内容(Save for override)
接下去就可以直接浏览器上修改源码,刷新后会加载这份修改后的代码文件

当你发现网络面板有个感汗号警告时,就意味着你启用了本地替换的功能,指定的源码文件不会从网络上加载,而是加载本地临时替换修改过的文件
这样就可以达到直接在源码调试的效果

实操场景说明

以上是个人日常比较常用的一些操作,每个技巧都不是割裂开的,经常是组合交叉使用

比如某生产环境来了个故障,本地无法复现,无法代理,还是个内网,只能远程客户设备直接在浏览器界面上调试定位

首先,我们要定位到大概源码,然后分析、断点、调试

怎么定位源码呢:

  • 字符串是不会被混淆的,所以可以全局搜索方式来尝试
  • 如果匹配点太多,那也可以先定位到某个关键接口,然后根据接口定位到源码
  • 如果还是没有定位到,对象的属性是不会被混淆的,所以也可以通过 $0 和 __vue__ 来根据某个 vue 组件的方法来定位源码

定位到源码后,断点还分析不出问题时,就可以继续利用 overrides 覆盖功能来直接修改浏览器源码进行调试

标签:__,定位,vue,浏览器,善用,源码,断点,调试
From: https://www.cnblogs.com/dasusu/p/17932742.html

相关文章

  • Sass函数与调试----持续更新
    内置函数详情查看菜鸟教程自定义函数自定义函数需要使用@function定义函数,通过@return指令返回数据。例如:@functiondouble($width){@return$width*2;}body{width:double(5px);}调试调试指令可以在编译sass时定义控制台的输出信息,共有三个指定,分别是:@debug......
  • core文件的产生及gdb调试core文件方法
    参考:https://blog.csdn.net/u011417820/article/details/71435031?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-71435031-blog-109817499.235%5Ev40%5Epc_relevant_3m_sort_dl_base1&d......
  • Selinux 调试
    背景知识就不介绍了,主要列几个实用的点: 一、编译相关如果新增加了sepolicy目录,需要编译到系统中,那么就需要使用系统中相关的宏BOARD_SEPOLICY_DIRS  编译到了vendor分区中BOARD_PLAT_PUBLIC_SEPOLICY_DIR、BOARD_PLAT_PRIVATE_SEPOLICY_DIR 编译到system分区中 ......
  • 一个完整Python实战项目:selenium识别验证码实现自动登录,自动操作浏览器获取某东数据
    最近都没啥时间,很久没更新了。今天分享一下,如何用selenium识别验证码,实现自动登录以及获取数据。目标:某东话不多说直接开始准备工作环境Python3.10Pycharm模块使用importrandomimporttimefromseleniumimportwebdriverimportpyautoguii......
  • 05.手机浏览器的性能分析(硬埋点)
    1.https://www.w3.org/TR/navigation-timing/ 2.资源加载指标promptforunload:访问一个新页面时,旧页面卸载完成的时间。redirect:重定向,用户注销登陆时返回主页面和跳转到其它的网站等appcache:检查缓存,是否打开DNS(域名系统):DNS查询的时间,如果是长连接或者请求文件来......
  • WebView中的页面调试方法
    在iOS12中,苹果正式弃用UIWebView,改成WKWebView,参考官方声明。后者在性能、稳定性、功能方面有很大提升,并且与Safari具有相同的JavaScript引擎(JavaScriptCore)。从Android4.4开始,增加ChromiumWebView,用来取代AndroidWebKitWebView。从Android......
  • 解决Linux环境下Android调试adb没有权限问题
    转载自:https://codeleading.com/article/1564378047/问题描述adbdevicesnopermission(userxxxisnotintheplugdevgroup);see[http://developer.android.com/tools/device.html]解决方案在/etc/udev/rules.d/目录下创建文件:51-android.rules,并在文件中填入如......
  • 谷歌浏览器输入地址后http自动转https解决方法
    谷歌浏览器输入“http+域名”后自动变成“https+域名”格式原因:安装配置了SSL证书,浏览器开启了HSTS(HTTPStrictTransportSecurity)功能,然后浏览器只能通过https协议访问,禁止使用http协议访问,所以浏览器中输入http后自动转成了https。解决方法:方法1:1)、进入谷歌浏览器,访......
  • API文档生成!超好用API调试工具
    在数字化时代,API已经成为了应用程序之间进行通信的关键桥梁。随着API的普及和复杂性的增加,API研发和管理也面临着越来越多的挑战。为了更好地应对这些挑战,Apipost提供了一整套API研发工具,包括API设计、API调试、API文档和API自动化测试等功能。本文将深入介绍Apipost的优势和特点,助......
  • API文档生成!超好用API调试工具
    在数字化时代,API已经成为了应用程序之间进行通信的关键桥梁。随着API的普及和复杂性的增加,API研发和管理也面临着越来越多的挑战。为了更好地应对这些挑战,Apipost提供了一整套API研发工具,包括API设计、API调试、API文档和API自动化测试等功能。本文将深入介绍Apipost的优势和特点,......