宝哥软件园

详细讲解Chrome实用调试技巧

编辑:宝哥软件园 来源:互联网 时间:2021-08-30

Chrome浏览器无疑是当今前端最受欢迎的工具。除了简单的界面、大量的应用插件、良好的代码规范支持和强大的V8解释器,Chrome开发者工具还提供了大量便捷的功能,方便我们在前端调试代码。我们的日常开发离不开Chrome。掌握Chrome调试技巧很可能会成为考量前端技术水平的标杆。

关于Chrome调试技巧的文章很多。基于自己的开发经验,希望从实际应用的角度再来谈谈这些功能,希望对大家有所帮助和启发。

常见快捷方式

在ctrl p项目中找到该文件,并在下面找到VueJS库文件:

成员函数位于ctrl shif o文件中,VueJS的nextTick接口如下:

代码片段随时编写代码

Chrome在souces页面提供了代码片段,我们可以在这里随时编写JS代码,运行结果会打印在控制台上。代码是全局保存的,我们可以在任何页面上查看或运行这些代码,包括新的选项卡。

我们不再需要创建一个新的HTML页面来运行一小段JS代码。代码片段的便利之处在于,你只需要打开chrome就可以编写一个可以在任何页面上运行的JS代码,每个使用过代码片段的人都知道,代码片段编辑器相当于崇高的文本。

在一个项目中,我需要将超过100页的word文档导入到页面中。考虑到后续的样式编写,页面的HTML结构如下:

Div class=' help-page _ row ' H3 class=' help-page _ title ' title/H3 p class=' help-page _ desc ' paragraph/p p class=' help-page _ desc ' paragraph/p/Div手动将100多页的内容合并到上面的HTML结构中,这样太费时不切实际,所以我决定用JS解析出文档内容的标题和段落,用HTML进行包装。

因为不需要视图支持,所以以片段形式编写这段代码是最好的选择。经过几次调试和修改,最终结果如下:

最后,将Word文档的内容复制到片段中,执行解析功能,并将最终解析的HTML结果打印到控制台:

片段可以使用控制台的复制界面,将分析结果直接复制到剪贴板更方便

当使用代码片段来完成这样的轻量级工作时,我们不需要追求代码的可读性和可维护性,我们的代码只需要在大多数场景下正常运行。

但是,为了满足大多数场景,需要反复调试和修改代码。Snippets最实用的一点是可以随时编写、调试和修改!

复制格式复制

在项目开发中,我们可能需要在本地复制后台数据,并将其作为本地数据进行调试。

如果在后台返回未格式化的JSON数据,我们在本地调试时不可避免地会遇到手工修改数据的情况,对于格式不美观的JSON数据进行修改会异常困难。

说到JSON格式化,我们首先想到的是JSON.stringify的格式化功能,比如四个空格的缩进:

JSON . stringify({ name : ' lxjwlt ' },null,4);

每次JSON数据格式化的时候写这个代码太麻烦了。我们可以通过chrome控制台的复制界面来解决这个问题:

1.从请求项目的右键菜单中选择复制响应。2.使用复制接口在命令行中处理数据。3.获取格式化的JSON数据

不仅仅是对象,复制接口可以复制任何数据。这里使用了复制数组或对象过程中美化数据的功能。

Iframe调试

如果我们使用Webpack server工具webpack-dev-server来访问项目的开发页面,我们会发现开发页面被嵌入到iframe中进行呈现。

由于Chrome控制台的默认上下文是window.top,因此内嵌在iframe中的开发页面无法在控制台中直接操作。如果我们想对iframe中的页面进行DOM操作,或者执行类库API,我们首先通过contentWindow获取iframe的上下文,然后用语句:进行调试

//html iframe id=' iframe '/iframe//带有(document . getelementbyid(' iframe ')的控制台。content window){ inspect(document . body);新Vue({ /*.*/});//做某事.}以上方法可以在任何浏览器上使用,但如果我们使用Chrome浏览器,Chrome控制台的上下文切换功能会更方便:

我们将上下文切换到iframe,控制台代码将基于iframe的上下文执行。如果您使用webpack-dev-server进行调试,您会喜欢这个功能。

调试没用?

Chrome控制台提供调试界面,可以传入函数。下次执行此函数时,调试器将自动调试此函数中的断点。

我们可以清楚地在代码中设置断点进行调试。为什么要用debug来设置它们?难道只是抛弃鼠标,用命令行强制?

在我看来,debug函数还提供了定位功能,可以让我们快速找到指定的函数。下面展示了如何调试VueJS的数据驱动,以及如何找到VueJS数据驱动的代码入口。

众所周知,VueJS的数据驱动通过defineProperty方法封装了数据的getter和setter,并在此封装中实现了数据变化驱动视图同步修改的功能。如果要研究VueJS的数据驱动,首先要找到封装getter和setter的地方,我们可以通过调试接口来定位。getter方法用作下面的示例。

首先,我们知道VueJS实例中的数据是mapping _data属性中的值:

var VM=new Vue({ data : { name : ' lxjwlt ' } });vm.name===vm。_ data.name//true,所以我们要查找的数据实际上在VueJS实例的_data属性中。接下来,我们通过getOwnPropertyDescriptor获取数据的getter函数:

object . GetOwnPropertyDescriptor(VM。_数据,“名称”)。得到;一旦找到getter函数,我们就可以使用调试接口在断点处调试它:

Debug(对象。getowntpropertysdescriptor(VM。_数据,“名称”)。get)这样,当我们获取vm.name数据时,自然会触发数据的getter函数,从而触发断点调试,自动定位函数:

以后要调试或者定位公共API,试试Chrome的调试接口功能!

条件断点

在Chrome中,我们可以为断点设置一个表达式。当表达式为真时,断点调试将生效。这是条件断点。

有了条件断点,我们可以在调试代码时更准确地控制代码断点的定时,尤其是当一段代码反复运行时,条件断点可以跳过大多数情况,只关注我们想要的场景。除此之外,条件断点调试还有另一种用法。

在断点调试中,我们经常会检查当前代码的执行状态。如果操作繁琐,我们可以使用条件断点来添加自动化操作,以帮助我们减少一些工作量。

例如,如果我们想在断点出现后查看DOM元素,断点条件可以写成如下形式:

//当DOM元素满足断点的某个条件时,看这个元素elem。hasattribute(' class ')inspect(elem);如果操作的返回值不明确,我们可以强制操作返回true,从而不影响断点的条件判断:

elem . hasattribute(' class ')(inspect(elem)| | true);或者按分支写:

if(elem . hasattribute(' class '){ inspect(elem);真的;}

再举个例子,在VueJS的调试中,我们经常需要知道VueJS实例的当前状态,所以每次触发断点调试的时候,都可以使用clear接口先清除控制台历史输出,然后打印出VueJS实例的当前状态:

vm.sum 4 (clear() || vm。$ log()| | true);

如果变量是在条件断点中定义的,则该变量是在全局范围上定义的,即在窗口对象上定义的

异步调试

Chrome调试器的异步模式是一个为调试异步函数而设计的函数。

在Promise被广泛使用的今天,我们都知道Promise的回调是异步执行的。在异步模式启动之前,传输栈只记录了回调函数本身,我们找不到代码执行的顺序,给我们调试带来了很大的困难。异步模式可以解决这个问题:

当异步模式打开时,异步函数之前的调用堆栈将被记录,调用堆栈中的代码执行状态将被保留。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+