使用Chrome Dev Tools, deb.js调试Javascript小技巧

本文讲介绍一些基于 Chrome Dev Tools 的实用的客户端Javascript 调试小技巧。我将重点关注那些无从下手,不知道该在哪儿添加断点的情景。

首先看下本文主题:

  • 找出哪段代码正在修改了页面
  • 找出谁发送了某个ajax请求
  • 在抛出异常时触发断点
  • 条件断点
  • 事件断点
  • 编程断点
  • 常用调试代码片
  • 给某个函数设置断点
  • 搜索对象的属性
  • 访问对象某个属性时
  • 用deb.js找出谁调用了某个函数

Chrome Dev Tools 调试器

首先让我们打开 Chrome Dev Tools 设置一个断点。使用Ctrl+Shift+I 或 Cmd+Option+I ,然后选择一个源代码文件,点击其中行号就可打上断点:

一个 Chrome Dev Tools 断点

问题是,很多情况下我们完全不知道该把断点打在哪里。比如说调试别人写的代码的时候。
接下来让我们看看Chrome Dev Tools 将如何帮助我们解决上述难题。

找出哪段代码修改了页面

一种常见的情景为:页面的某个部分被修改了,但到底是被哪段代码修改的不是很清楚。通过选中某个HTML元素,右键就可以添加一个断点,它会在该元素被修改时触发:

这里写图片描述

有三种选项可以检测页面的更改:

  • 子树更新:只要元素的任一子元素被更改,即触发断点。这是最经常使用的选项。
  • 属性更新: 当元素的属性被更改时触发断点。
  • 节点移除:当元素从文档移除时触发断点。

找出谁发送了某个ajax请求

有时候我们只知道发送了一个ajax请求,但不清楚是哪段代码干的。在 sources 选项卡下有一个 “XHR breakpoint”面板,可以选中“Any XHR”添加ajax断点:

这里写图片描述

另外,面板头部的点击加号,可以添加条件ajax断点,只有当请求的url包含匹配串时才会触发。

在抛出异常时触发断点

Chrome Dev Tools 允许我们在异常抛出时,使用调试器暂停程序。这项功能可是用 sources 选项卡下的暂停按钮激活。暂停按钮下的复选框用来限制只有当异常未被捕获时,才使用该断点暂停程序:

这里写图片描述

这种方法可以及早发现错误,防止错误无声无息的被忽略在console中。

条件断点

有时候我们不想断点每次都被触发。比如,我们只想当函数的参数等于某个特定值时才触发断点。

你可以右键点击行号,选择 Edit breakpoint 选项来添加判断条件:

这里写图片描述

在判断条件中你可以使用任何可访问的局部变量。

事件断点

除了ajax,所有类型的事件都可以用来触发断点:clicks, double clicks, blur/focus , setTimeout等等。这些断点可以在 source 选项卡下的 Listener Breakpoints 面板里设置:

这里写图片描述

编程断点

可以简单的添加下面代码来触发断点:

debugger;

当执行到这行时,调试器会被触发,就像是在这行设置了断点一样。

这个功能很有用,可以当做是手动设置断点的一种方式。

常用调试代码片

Chrome Dev Tools 允许开发者保存一个小代码片供未来之用。这个功能在 source 选项卡下的 Snippets 子选项卡里:

这里写图片描述

这个功能可以用来保存你或其它人开发的,经常使用的调试代码片。一些我最经常使用的代码片来自于 Paul Irish(Google Dev Tools evangelist)

将这些代码片复制到你的开发者工具中,你可以随时随地的通过console访问它们。后面的章节我们将简单看一下这些代码片。

给某个函数设置断点

stopBefore.js 代码片允许我们给某个函数设置断点,它会在函数被调用时触发。例如,下面的代码将会在 document.getElementById 函数调用之前触发断点:

stopBefore(document, 'getElementById')

搜索对象的属性

grep.js 代码片允许我们在对象及其原型链中搜索拥有匹配条件的属性。例如,下面的语句将会搜索document对象中所有带有get的属性:

grep(document, 'get');

访问对象某个属性时触发断点

debugAccess.js 代码片允许我们访问对象某个属性时触发断点。例如,下面的代码将会在每次访问document.cookie 时触发断点。

debugAccess(document, 'cookie');

用deb.js找出谁调用了某个函数

作为结束,让我们来看看deb.js,一个微型JavaScript 调试库。

首先,将下面script标签放到网页头部,要在任何其它script文件之前:

<script src="deb.min.js"></script>

然后调用 .deb()来标记一个需要调试的函数:

var calculateSomething = function(cb) {// ...}.deb();

当函数被调用时,console就会输出下面信息:

Deb.js output

我们可以看到,deb.js 打印出了很多信息:

  • 函数参数的值
  • 栈调用记录
  • 返回值
  • 执行时间

原文:Javascript debugging tips using the Chrome Dev Tools, deb.js and more

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

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

相关文章

jenkins Auth fail验证失败

重新设置密码转载于:https://www.cnblogs.com/cocoat/p/5982931.html

CSS3 Perspective

一 、在元素的父元素上使用 在父元素上使用Perspective属性可以使用透视投影视图&#xff0c;在父元素上加上&#xff1a; perspective:400px 表示相机距离屏幕位置为400px。默认相机对准父元素的中心&#xff0c;要重设相机的焦点可以使用&#xff1a; perspective-origin…

在ASP.NET Core使用Middleware模拟Custom Error Page功能

一、使用场景 在传统的ASP.NET MVC中,我们可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了HandleErrorAttribute特性,那么默认的,当这个Action抛出了异常时MVC将会显示Error视图,该视图位于~/Views/Shared目录下。 自定义错误页面的…

状态模式案例分析

需求 初始状态下&#xff0c;【暂停按钮】不可点&#xff0c;所有数轴可调: 点击【动态波】后&#xff0c;【暂停按钮】可点&#xff0c;所有数轴可调&#xff1a; 点击【暂停按钮】后&#xff0c;“暂停”变为“播放”&#xff0c;所有数轴不可调&#xff1a; 分析需求 上面…

Linux系统IP地址

1、IP地址概述 2、配置IP地址 查看IP地址 在网卡上绑定一个IP地址 同一张网卡上绑定多个IP 绑定一块网卡设备 修改或删除IP地址 IP地址概述 这里不多赘述&#xff0c;参考《计算机网络》课程。 配置IP地址 [rootweekend110 ~]# ifconfigeth0    Link encap:Ethernet HWadd…

qwidget多个窗口同步_Linux命令screen—终端切换,工作环境保存,画面同步,防断网...

Screen基础Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话&#xff0c;并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。创建一个新的窗…

Snap svg:路径变换和相交计算

Snap.svg对原生的svg进行了封装&#xff0c;为svg的创建、操作提供了便捷的方法&#xff0c;但是官网的文档对一些概念没有解释&#xff0c;难免会造成困扰。比如说路径的旋转&#xff0c;就存在变换后得不到路径交点的问题。 用普通的变换得不到路径的相交点 Snap.svg提供了…

Linux文件基本操作

使用declare命令创建一个变量名为 tmp 的变量&#xff1a; 使用号赋值运算符为变量 tmp 赋值为 dunzhu&#xff1a; 读取变量的值&#xff0c;使用echo命令和$符号&#xff08;$符号用于表示引用一个变量的值&#xff0c;初学者经常会忘记输入&#xff09; 在dunzhu家目录创建一…

Snap svg 主要对象

对象概述Elementsvg规定的元素&#xff0c;提供修改属性、绑定事件、操作数据、操作层级关系、动画等方面的方法&#xff0c;类似jquery选取的元素Fragment虚拟节点&#xff0c;其用处是可以用js创建多个元素&#xff0c;添加到Fragment&#xff0c;不会影响到实际的DOM&#x…

初中位似图形作图_[如何画位似图形] 位似图形的画法及步骤

如何画位似图形位似变换是新课程标准中涉及的一个重要知识点&#xff0c;它是图形变换的一种&#xff0c;实际上它是相似变换的一种特殊情形&#xff0c;存在位似中心———即对应顶点连线的交点&#xff0e;其位似比就是相似比&#xff0e;作为一个新的知识点&#xff0c;越来…

DES 加密 解密

EncryptUtil feiyangklDES 一行代码完成DES加密&#xff0c;加密模式 DES CBC DEMO GIF DEMO 简介 最近项目中用到DES加密&#xff0c;在这里整理成篇&#xff0c;供大家参考阅读&#xff0c;在使用该demo过程中&#xff0c;你可能会遇到一些问题&#xff0c;首先你需要看一下…

bootstrap带有下拉按钮的输入框_关于bootstrap--表单(下拉select、输入框input、文本域textare复选框checkbox和单选按钮radio)...

html 里面的 role 本质上是增强语义性&#xff0c;当现有的HTML标签不能充分表达语义性的时候&#xff0c;就可以借助role来说明。通常这种情况出现在一些自定义的组件上&#xff0c;这样可增强组件的可访问性、可用性和可交互性。role的作用是描述一个非标准的tag的实际作用。…

CSS3 线性渐变背景的过渡效果

对于background-color&#xff0c;可以直接transition: background-color 2s就能实现过渡效果&#xff0c;但对于background:-webkit-radial-gradient(circle,#ffc71d 0,rgba(168,117,14,.5) 130%);就无能为力了。对于这种复杂的背景&#xff0c;只能给opacity添加过渡效果了&a…

markdown绘图插件----mermaid简介

作者&#xff1a;黄永刚 mermaid简介 当撰写文档的时候&#xff0c;对于流程图的生成大多使用Visio等繁重的工具&#xff0c;没有一种轻便的工具能够画图从而简化文档的编写&#xff0c;就像markdown那样。 mermaid解决这个痛点&#xff0c;这是一个类似markdown语法的脚本语言…

华为三层交换机路由配置案例_华为三层交换机配置实例

1华为三层交换机配置实例一例服务器1双网卡&#xff0c;内网IP:&#xff0c;其它计算机通过其代理上网PORT1属于VLAN1PORT2属于VLAN2PORT3属于VLAN3VLAN1的机器可以正常上网配置VLAN2的计算机的网关为&#xff1a;配置VLAN3的计算机的网关为&#xff1a;即可实现VLAN间互联如果…

大学只待成追忆,只是工作已半年,2016再见

时光匆匆&#xff0c;真的不知不觉&#xff0c;已经毕业半年。这一年发生了好多事&#xff0c;回望简直难以相信。 再见广州&#xff0c;你好厦门 广深工作好找&#xff0c;但心就是想离开&#xff0c;当时想的是&#xff0c;找一个地方&#xff0c;让一切重新开始。来到厦门…

centos7挂载nas存储_CentOS7搭建NAS文件共享存储

概述&#xff1a;NFS是一种基于TCP/IP传输的网络文件系统协议&#xff0c;最初由SUN公司开发。通过NFS协议&#xff0c;客户机可以像访问本地目录一样访问远程服务器中的共享资源。NFS得到了如NAS等网络存储的设备极好支持。也是LVS共享存储的首选。环境&#xff1a;CentOS 7.8…

【移动端html5】 android video播放进度精确控制

android上视频播放存在的问题 在PC上播放html5视频&#xff0c;设置video.currentTime5,视频将跳到5s的位置&#xff0c;并且显示出第5s的画面。在安卓下&#xff0c;却存在下面两个问题&#xff1a; 在安卓上&#xff0c;为了省电&#xff0c;在暂停的时候&#xff0c;改变视…

柯理化

在JS中柯里化就是把一个需要传入多个参数的函数变成多个嵌套的只要传入一个参数的函数 在普通函数中的柯理化&#xff1a; var addfunction(x,y){ return xy; } 柯里化&#xff1a; var addCurringfunction(x){ return function(y){ return xy; } } addCurring(1)(2);//3 如果是…

Java NIO 教程

NIO 概述 NIO有三个核心组件&#xff1a; 通道&#xff08;Channels&#xff09;缓冲器&#xff08;Buffers&#xff09;选择器&#xff08;Selectors&#xff09; 实际上&#xff0c;NIO的组件和类远不止这三个&#xff0c;但这个三个组件是核心。至于其它组件&#xff0c;…