`
JerryWang_SAP
  • 浏览: 1030620 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

Jerry和您聊聊Chrome开发者工具

阅读更多

Chrome开发者工具是Jerry日常工作使用的三大调试器之一。虽然工具名称前面带了个"开发者", 但是它对非开发人员仍然有用。不信?

用Chrome打开我们常用的网站,按F12,在Console标签页里看到这些信息,这些都是很老的梗了。

 
 

在网易云音乐上听歌,如果想保存到本地,不需要安装客户端,直接在Chrome开发者工具里找到mp3的真实链接即可保存。

 

对于在线视频也能用同样的方式找到真实地址然后保存到本地。

 

前段时间我看到一则新闻,题目是"骗子骗术再高,遇到程序员也折腰",介绍了一位程序员收到骗子的短信后,不仅识破了骗子的套路,全程机智应答,设陷下套,一步步将对方引入自己的节奏,最后直接控制了骗子的电脑和摄像头。

我的这位同行用到的一个方法就是:在上图Chrome开发者工具的Console面板里敲入指令document.body.contentEditable='true', 这样使得整个网页处于可编辑状态。然后就可以随心所欲地修改网页上的内容,比如可以像下图这样做做白日梦:

 

使用Chrome的记住密码功能,时间长了都忘记密码是什么了。虽然这些密码在Chrome设置里也能找到,但更快捷的方式还是直接在Chrome开发者工具里打印出来。

在Chrome开发者工具里点击Elements标签,然后点击网页上的密码元素,该元素的实现的html代码就显示在标签页里了。这里我们能看出该元素的id为password。

 

再回到Console标签,输入$("#password").value, 即可显示出密码。

 

以前网上有个著名的段子。一位程序猿打开珍爱网想找个对象。浏览了几分钟网页,他习惯性地按了F12打开Chrome开发者工具,发现Console标签打印了几条错误信息,然后就习惯性地开始了调试。

 

然后,就没有然后了。。。

 

下面是一些我日常工作中使用Chrome开发者工具的心得和小技巧,希望对您提高开发和调试的效率能有所帮助。

1. Element属性断点

在Element标签页选中某个html标签,在右键菜单里设置Attributes modifications断点。下图意思是一旦title标签的属性发生变化,断点自动触发。

我曾经处理过一个incident,用户抱怨在Fiori应用里做了一些操作之后,页面的title被修改成一个错误的值。借助这个属性断点功能,我很快找到了title被修改的那行代码。这个incident的更多细节请参考我的博客:
A quick way to find which code has changed the UI5 application page title by debugging

 

2. 在浏览器的原生方法里设置断点

这种说法其实并不准确,因为我们没办法在Chrome里查看浏览器原生方法的实现代码,更别提设置断点了。

 

其实我的需求是,希望调试的时候,在这些浏览器原生方法以某些特殊输入参数被调用时能停下来。

举个例子,在我研究Angular框架时,用ng-repeat画了一个列表,如下图所示。我发现对于每条列表记录,最终生成的原生html代码都有一个注释元素,如下图红色高亮区域显示。

 

我很好奇Angular框架是在哪行代码生成的这三个注释元素。按照推理,这些注释肯定是通过原生方法createComment创建的,然而我无法在这个方法里面设置断点。如果直接在Angular框架里根据源代码createComment搜索,然后在所有的搜索结果处设置断点——这种方法理论上可行,然而效率太低,因为搜索结果有将近100处调用了createComment。

怎么办?

(1) 在angular.js文件最开始的地方设置断点, 打开应用,断点触发:

 

(2) 将浏览器原生的方法实现保存在变量oldFn里,然后重写createComment。在重写的版本里,加上我自己的判断逻辑:我期望只有当创建的comment文本包含ngRepeat时,断点才触发。实现如下图所示。在console里执行下图代码,完成对createComment原始实现的覆盖。

 

然后在调试器里继续执行,最终断点在我想要找的位置触发:

 

这就是我要寻找的Angular框架创建包含ngRepeat注释的代码位置:

 

3. Chrome开发者工具里的一些隐藏命令

在Chrome地址栏里输入chrome://开头的一系列命令可以实现各种各样的功能。不过我日常工作用得最多的是chrome://net-internals

 

在SAP成都Revenue Cloud开发团队Wang Cong的帮助下,我使用这个功能解开了困扰过我一段时间的关于JavaScript source code map的谜团。

 

我把如何通过chrome://net-internals研究JavaScript source code map的过程写在了这三篇博客里:

(1) A debugging issue caused by source code mapping

(2) UI5 Source code map机制的细节介绍

(3) Useful Chrome Tool chrome://net-internals to monitor http request detail

4. 将JavaScript变量的内容保存成本地文件

我在SAP处理Fiori应用的incident时经常需要这个功能:比如调试Fiori应用的前后台交互,我想把后台返回的JSON响应另存成一个本地文件。当然我可以在Chrome开发者工具的network标签页手动选中响应内容,然后Ctrl C,再到本地新建一个文件,Ctrl V。我嫌这个步骤麻烦,在这篇博客上找到了另一种快捷的做法。

直接在console里执行这段代码:

 

这段代码会给console对象注入一个新方法save, 接下来就能使用console.save(<variable name>, <local file name>)将任意变量保存成本地文件,非常方便。

 

5. 分析JavaScript的垃圾回收机制

这种类型的分析通过Profiles这个标签页完成。详细说明参考我的博客:
An example of using Chrome Development Tool to analyze JavaScript garbage collector

 

6. 自学一些浏览器原生方法的实现

 

想知道这种toString方法具体是怎么实现的么?

 

您得在Chrome开发者工具里打开选项Show native functions in JS profile,然后查看我的博客:

Use Chrome development tool to do self-study on some JavaScript function native implementation

7. console.log的彩色打印

当我处理一些非常棘手的复杂问题时,经常使用到这个彩色打印的技巧。

我曾经处理过一个incident,UI上显示的列表一次从后台读取20条记录,其中有一条记录的guid和其实际内容不匹配。我需要找到究竟是20条记录里的哪一条记录有错。如果用调试的方式,我设置断点的函数在循环里被调用,断点会不断被触发。我觉得很不耐烦,就采用了console.log的方式,打印每条记录的guid和详细内容。当我观察这些打印输出时,发现它们被淹没在了UI5框架大量的log里。因为我查看自己打印的log的同时,也需要结合UI5打印的log作为上下文来分析,因此我不能在Console标签页里使用过滤的功能来使得只有我自己打印的log被显示出来。

有什么办法能让我自己打印的log不会淹没在UI5框架海量的log里呢?办法就是使其成为“万花丛中一点绿"。

采用下列自定义函数myLog输出的日志,在console里显示的效果如下:

 
 

可以显示得再花哨一点:

 
 

8. 使用正则表达式过滤网络请求

 

9. jQuery选择器风格的Console命令

比如我想快速知道当前UI一共有多少个button元素,并查看某些元素的详情。采用类jQuery选择器的语法$('button')即返回所有button元素。

 

还有其他很多小技巧,以及我最常用的快捷键组合,因为篇幅限制不再赘述,您可以在我的这篇博客里找到我使用Chrome开发者工具的全部技巧。

Chrome Development Tool tips used in my daily work

希望这篇文章能让您对Chrome开发者工具有一些更深入的了解,感谢阅读。

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

 
 
分享到:
评论

相关推荐

    jerry语言的编译器和对应的虚拟机

    Jerry语言是一种基于C++设计的编程...开发者可以利用这个工具链编写Jerry代码,然后在不同的平台上部署和运行,而无需关心底层的硬件差异。这种设计使得Jerry语言成为了一个独立且灵活的解决方案,适用于开发各种应用。

    Tom和Jerry钟表网页版

    开发者可能还利用了CSS3的动画功能,使Tom和Jerry的动作随着时间的推移而变化,增加了娱乐性。 至于“web”标签,意味着这个项目是完全基于Web的,可以在任何支持HTML5和JavaScript的浏览器上运行,无需安装,只需...

    Tom and Jerry(Python版)

    在《Tom and Jerry》这款游戏中,Pygame库发挥了关键作用,它使得开发者能够轻松创建游戏窗口,绘制角色、背景和动画效果,以及处理用户输入和游戏逻辑。 游戏的核心部分包括以下几个关键技术点: 1. **游戏窗口和...

    Jerry的冒险(WEB网页游戏).zip

    在《Jerry的冒险》中,开发者可能利用了Unity的物理引擎来创建角色和物体的动态交互,通过编写C#脚本来控制游戏逻辑,比如角色移动、敌人行为和关卡设计。此外,Unity的动画系统可能用于制作角色动作和场景过渡,...

    chrome崩溃.docx

    Chrome的沙盒模式是一种安全特性,它将每个浏览器标签页和扩展程序运行在独立的环境中,以防止它们相互影响或对操作系统造成破坏。然而,有时沙盒模式可能会因系统权限问题或与其他安全软件冲突而导致崩溃。通过添加...

    chrome浏览器崩溃一键修复

    chrome浏览器崩溃解决 @echo off reg add HKLM\SOFTWARE\Policies\Google\Chrome\ /v RendererCodeIntegrityEnabled /t REG_DWORD /d 0

    Jerry Cuomo Dockercon Presentation

    DockerCon是Docker社区的一个年度大会,主要面向Docker用户和开发者,提供技术分享、最佳实践和行业洞察。而Jerry Cuomo是IBM的著名人物,他对于云计算、区块链等技术领域有深入的研究和实践。因此我们可以推断出这...

    Android SQLite可视化操作工具

    然而,由于其命令行界面和编程API的复杂性,开发者有时需要借助可视化工具来更方便地进行数据管理。这就是“Android SQLite可视化操作工具”存在的意义。 这款工具提供了直观的图形用户界面(GUI),使得开发者可以...

    C# 编写的TOM and Jerry

    在“TOM and Jerry”游戏中,角色Tom和Jerry可能被设计为类,每个类都包含各自的属性(如位置、速度)和方法(如移动、交互)。通过类的实例化,我们可以创建游戏中的角色,并通过调用相应的方法来控制它们的行为。 ...

    Jerry Smit

    BBC News with Jerry Smit

    Jerry_B4s_handwriting

    在实际应用中,设计师或开发者可以将“Jerry_B4s_handwriting”字体整合到他们的设计软件中,如Adobe Illustrator、Photoshop或InDesign,或者在网页设计时通过CSS(层叠样式表)引用该字体,让访客能够在浏览器上...

    Java常用工具包 Jodd.7z

    Java常用工具包Jodd是一个全面的开源库,它为Java开发者提供了一系列实用工具类和框架功能。这个压缩包“Java常用工具包 Jodd.7z”包含了一系列与Jodd相关的文件,旨在帮助开发者提高开发效率,简化代码实现,增强...

    postman开发调试工具

    Postman是一款广受欢迎的API开发和调试工具,尤其在Web服务和RESTful API的测试领域中,它扮演着至关重要的角色。尽管最初是作为Chrome浏览器的扩展插件启动,但现在已经发展为一个独立的应用程序,支持Windows、Mac...

    屏幕取色小工具

    屏幕取色工具是一种非常实用的...总的来说,屏幕取色工具是前端开发者不可或缺的辅助工具,它简化了颜色获取过程,提高了设计和开发效率。"PickColor.exe"这样的轻量级应用,以其便捷性和实用性,深受广大开发者喜爱。

    Vue.js-devtools_5.1.1.rar

    Vue.js 是一个流行的前端JavaScript框架,用于...通过熟练使用这个工具,开发者可以更好地理解和优化Vue应用程序,提升开发体验。无论你是Vue的新手还是资深开发者,都应该掌握这一强大武器,以提高你的开发生产力。

    Jerry30Birthday:杰瑞(Jerry)诞辰30周年

    在这个活动中,开发者们可能使用了JavaScript,一种广泛应用于网页和网络应用开发的编程语言,来创建互动式的庆祝页面或者游戏,为粉丝们带来乐趣。 JavaScript,简称JS,是由Brendan Eich在1995年发明的,最初是...

    Oracle8i Java Tools Reference Release 3 (8.1.7)

    本手册是 Oracle Corporation 推出的一个关于 Oracle8i Java 工具的详细指南,旨在帮助开发者快速掌握 Oracle8i Java 工具的使用方法和应用场景。 知识点: * Oracle8i Java 工具是 Oracle Corporation 推出的一个...

    Jerry移进规约初稿的图片上传

    标题“Jerry移进规约初稿的图片上传”暗示了我们即将探讨的内容可能与软件开发中的编程规约有关,特别是与一个名为“Jerry”的项目或工具相关。规约通常指的是在编程过程中为了保持代码质量、可读性和团队协作的一致...

    VB.net-DG_To_Excel.rar_Jerry_soft.dll_excel_vb.net excel

    这个库可能是用于简化VB.NET与Excel交互的工具。 在VB.NET中,DataGridView是一种常用的用于展示数据的控件,它允许用户以表格形式查看和编辑数据。而Excel是Microsoft Office套件中的一个应用程序,广泛用于创建、...

    JL编译环境

    总之,JL编译环境为杰理芯片的开发者提供了一个完整的开发解决方案,包括代码编辑、编译、调试和工具链维护等环节。有了这样的环境,开发者可以高效地创建和调试应用程序,适应各种嵌入式项目的需求。

Global site tag (gtag.js) - Google Analytics