阅读更多

0顶
0踩

编程语言

转载新闻 关于JavaScript调试的十来个小Tips

2016-06-03 10:57 by 副主编 mengyidan1988 评论(0) 有4134人浏览
引用

本文来自:segmentfault.com


‘debugger;’
除了console.log,debugger就是另一个我很喜欢的快速调试的工具,将debugger加入代码之后,Chrome会自动在插入它的地方停止,很像C或者Java里面打断点。你也可以在一些条件控制中插入该调试语句,譬如:
if (thisThing) {
    debugger;
}

将Objects以表格形式展示
有时候我们需要看一些复杂的对象的详细信息,最简单的方法就是用console.log然后展示成一个列表状,上下滚动进行浏览。不过似乎用console.table展示成列表会更好呦,大概是介个样子:
var animals = [
    { animal: 'Horse', name: 'Henry', age: 43 },
    { animal: 'Dog', name: 'Fred', age: 13 },
    { animal: 'Cat', name: 'Frodo', age: 18 }
];
 
console.table(animals);

多屏幕尺寸测试
Chrome有一个非常诱人的功能就是能够模拟不同设备的尺寸,在Chrome的Inspector中点击toggle device mode按钮,然后就可以在不同的设备屏幕尺寸下进行调试咯。

在Console快速选定DOM元素
在Elements选择面板中选择某个DOM元素然后在Console中使用该元素也是非常常见的一个操作,Chrome Inspector会缓存最后5个DOM元素在它的历史记录中,你可以用类似于Shell中的$0等方式来快速关联到元素。譬如下图的列表中有‘item-4′, ‘item-3’, ‘item-2’, ‘item-1’, ‘item-0’这几个元素,你可以这么使用。

获取某个函数的调用追踪记录
JavaScript框架极大方便了我们的开发,但是也会带来大量的预定义的函数,譬如创建View的、绑定事件的等等,这样我们就不容易追踪我们自定义函数的调用过程了。虽然JavaScript不是一个非常严谨的语言,有时候很难搞清楚到底发生了啥,特别是当你需要审阅其他人的代码的时候。这时候console.trace就要起作用咯,它可以帮你进行函数调用的追踪。譬如下面的代码中我们要追踪出car对象中对于funcZ的调用过程:
var car;
 
var func1 = function() {
func2();
}
 
var func2 = function() {
func4();
}
  
var func3 = function() {
 
}
  
var func4 = function() {
car = new Car();
car.funcX();
}
  
var Car = function() {
this.brand = ‘volvo’;
this.color = ‘red’;
 
this.funcX = function() {
this.funcY();
}
 
this.funcY = function() {
this.funcZ();
}
 
this.funcZ = function() {
console.trace(‘trace car’)
}
}
 
func1();

这边就可以清晰地看出func1调用了func2,然后调用了func4,func4创建了Car的实例然后调用了car.funcX。

格式化被压缩的代码
有时候在生产环境下我们发现了一些莫名奇妙的问题,然后忘了把sourcemaps放到这台服务器上,或者在看别人家的网站的源代码的时候,结果就看到了一坨不知道讲什么的代码,就像下图。Chrome为我们提供了一个很人性化的反压缩工具来增强代码的可读性,大概这么用。

快速定位调试函数
当我们想在函数里加个断点的时候,一般会选择这么做:
  • 在Inspector中找到指定行,然后添加一个断点
  • 在脚本中添加一个debugger调用

不过这两种方法都存在一个小问题就是都要到对应的脚本文件中然后再找到对应的行,这样会比较麻烦。这边介绍一个相对快捷点的方法,就是在console中使用debug(funcName)然后脚本会在指定到对应函数的地方自动停止。这种方法有个缺陷就是无法在私有函数或者匿名函数处停止,所以还是要因时而异:
var func1 = function() {
func2();
};
 
var Car = function() {
this.funcX = function() {
this.funcY();
}
 
this.funcY = function() {
this.funcZ();
}
}
 
var car = new Car();

禁止不相关的脚本运行
当我们开发现代网页的时候都会用一些第三方的框架或者库,它们几乎都是经过测试并且相对而言Bug较少的。不过当我们调试我们自己的脚本的时候也会一不小心跳到这些文件中,引发额外的调试任务。解决方案呢就是禁止这部分不需要调试的脚本运行,详情可见这篇文章:: javascript-debugging-with-black-box。

在较复杂的调试情况下发现关键元素
在一些复杂的调试环境下我们可能要输出很多行的内容,这时候我们习惯性的会用console.log, console.debug, console.warn, console.info, console.error这些来进行区分,然后就可以在Inspector中进行过滤。不过有时候我们还是希望能够自定义显示样式,你可以用CSS来定义个性化的信息样式:
console.todo = function(msg) {
console.log(‘ % c % s % s % s‘, ‘color: yellow; background - color: black;’, ‘–‘, msg, ‘–‘);
}
 
console.important = function(msg) {
console.log(‘ % c % s % s % s’, ‘color: brown; font - weight: bold; text - decoration: underline;’, ‘–‘, msg, ‘–‘);
}
 
console.todo(“This is something that’ s need to be fixed”);
console.important(‘This is an important message’);

在console.log()中你可以使用%s来代表一个字符串 , %i 来代表数字, 以及 %c 来代表自定义的样式。

监测指定函数的调用与参数
在Chrome中可以监测指定函数的调用情况以及参数:
var func1 = function(x, y, z) {
};

这种方式能够让你实时监控到底啥参数被传入到了指定函数中。

Console中使用$进行元素查询
在Console中也可以使用$来进行类似于querySelector那样基于CSS选择器的查询,$(‘css-selector’) 会返回满足匹配的第一个元素,而$$(‘css-selector’) 会返回全部匹配元素。注意,如果你会多次使用到元素,那么别忘了将它们存入变量中。

Postman
很多人习惯用Postman进行API调试或者发起Ajax请求,不过别忘了你浏览器自带的也能做这个,并且你也不需要担心啥认证啊这些,因为Cookie都是自带帮你传送的,这些只要在network这个tab里就能进行,大概这样子:

DOM变化检测
DOM有时候还是很操蛋的,有时候压根不知道啥时候就变了,不过Chrome提供了一个小的功能就是当DOM发生变化的时候它会提醒你,你可以监测属性变化等等:

Further Reading
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Linux服务器配置大全,含有各种linux环境下服务器配置方法

    内涵FTP、DNS、squid、VNC、ssh、telnet、samba、nginx、mysql、selinux、dhcp、apache、等各种服务器的配置方法!!!老师的PPT,偷偷上传了!!

  • 【Linux入门】Linux环境配置

    Linux云服务器,虚拟机 环境搭建

  • Linux环境下的基础服务配置

    Linux环境下的基础服务配置

  • 软考(网工)——Linux服务器配置

    网络配置文件:ifcfg-enoxxx、hostname、hosts、host.conf、reslov.conf。网络配置命令:ifconfig、route、netstat。文件/目录管理:挂载、权限。文件和目录操作命令13个。

  • Linux常用命令及主流服务部署大全

    Linux常用命令及主流服务部署大全

  • linux服务器安装学习篇

    从linux的起源Minixlinux和windows的不同:1.Linux严格区分大小写,而Windows的dos窗口是不区分大小写的。必须要养成区分大小写的习惯,比如Linux的L要大写啦UNIX都要大写啦iOS的OS大写啦等等,平常用的时候就要区分大小写。2.Linux的所有软件包括硬件都是以文件格式存储的。3.Linux不靠扩展名来区分文件类型。4.Windows下的程序不能在Linux中...

  • Linux服务器配置、环境搭建常用命令行

    Linux服务器配置、环境搭建常用命令行 Linux常用命令行 cd  切换目录 cd ~  用户目录 cd /  所有盘符 cd .  当前目录 cd ..  上一级目录 whoami  当前主机用户名 history  查看历史操作记录 which/whereis node  返回文件路径(windows中不支持whereis) open/start 1.txt  打开相应的文件(wi...

  • linux服务器配置

    查看磁盘的配置比例 df -h [developer@10-10-xx-xx ggopenapi]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 20G 6.0G 13G 32% / tmpfs 7.8G 0 7.8G 0% /dev/shm...

  • linux系统各服务相关设置

    一、配置JDK环境变量    vi /etc/profile在该profile文件中最下面添加:    export JAVA_HOME=/root/softs/jdk1.8.0_77    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar    export PATH=$PATH:$JAVA_HOME/bin   ...

  • Linux——网络配置及基础服务

    文章目录Linux网络基础查看网络接口信息 ifconfig查看所有活动网络接口的信息查看指定网络接口信息查看主机名称hostnamehostname命令:查看或设置当前主机名修改主机名:(两种方式)查看路由表条目 routeroute命令查看网络连接情况 netstatnetstat命令常用选项:试网络连接 pingping命令跟踪数据包 traceroutetraceroute 命令域名解析 ...

  • Linux服务器配置

    文章目录一、服务器选用二、配置服务器1.下载安装MySQL2.下载安装jdk3.下载安装tomcat 一、服务器选用 随便找个云服务器,腾讯云,阿里云,华为云等等重要的是选对系统,建议 设置一个登录用的账户 一般会下载xshell,xftp这类辅助操作软件 apt-get update 更新下载工具 apt install lrzsz 下载上传工具 apt install vim 下载记事本 。 二、配置服务器 1.下载安装MySQL 代码如下(示例): apt-get install mysql-s

  • linux 服务配置

    1、基本的linux 服务器防火墙配置 2、配置之前如果需要将之前的所有规则清楚 iptables -F -------清除预设表filter中的所用规则链的规则 iptables -X ----------清除预设表中使用者自定义链中的规则 iptables -s -----查看配置的规格 iptables -A INPUT -i...

  • linux服务器的基础配置

    我用的是阿里云的服务器(2+40),系统为Ubuntu 18.04,远程连接用的xshell(远程连接就不介绍了) java环境配置 1、更新软件包列表: sudo apt-get update 2、安装openjdk-8-jdk: sudo apt-get install openjdk-8-jdk 3、查看java版本,看看是否安装成功 java -version 参考 坑点: 一般来说linux系统分为两类: 1、redhar系列:readhat、centos、fedora等 2、debian系

  • 服务器安装linux系统教程

    一、linux镜像的刻录 1.首先打开电脑上面任意浏览器(IE、Microsoft Edge、chrome、Firefox),输入网址 https://www.centos.org/我们可以看到如下界面选择立即获取centos下载最新的安装镜像,复制下载链接(http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64...

  • linux系统环境配置

    1.使用“su -”命令切换root用户。(3)修改完成后重启网络服务,使修改生效。(1)查看自己的IP,掩码, 网关。编辑完成后按“Esc”退出编辑模式。进入文件后按“i”进入编辑模式。(3)重启系统,使修改生效。(2)禁止防火墙开机启动。(2)修改ip配置文件。输入“:wq”保存退出。(3)查看防火墙状态。

  • Linux搭建服务器

    linux安装jdk,mysql,tomcat

  • Linux服务器---基本设置

    Centos分辨率       virtualbox里新安装的Centos 7 的分辨率默认的应该是800*600。 如果是‘最小化安装’的Centos7 进入的就是命令模式 。如果安装的是带有GUI的Centos7 可在桌面模式下 Ctrl+Alt+F1/F2/F3/F4 组合件来切换命令模式和桌面模式。进入命令模式 开始修改操作: 输入下面命令: [root@localhost ~]# ged...

  • Linux系统管理与服务部署

    1.   Linux系统篇 2.1            Linux系统管理 通过前两章的学习,我们已经能够独立安装Linux系统,已经掌握了Linux学习的技巧,那接下来,我们将系统的来了解Linux系统各目录、权限及常用命令的使用。 2.1. 1         Linux目录初识 通过前面的学习,我们已经能够独立安装完一个linux系统,那接下来我们来熟悉一下Linu

  • linux下配置服务,超简单(学习笔记)

    以nginx服务为例子: 1、在/etc/init.d/目录下编写脚本,名为nginx #!/bin/sh  #  # nginx - this script starts and stops the nginx daemon  #  # chkconfig:   - 85 15  # description: Nginx is an HTTP(S) server, HTTP

Global site tag (gtag.js) - Google Analytics