当前位置: 首页 > news >正文

五个你必须知道的javascript和web debug技术

在前端开发中,调试技术是必不可少的技能,本文将介绍五种前端开发必备的调试技术。

  1. Weinre移动调试
  2. DOM 断点
  3. debugger断点
  4. native方法hook
  5. 远程映射本地调试

Weinre

在移动上面开发调试是很复杂的,所以就有了weinre。安装weinre可以实现pc来调试手机页面,所以对于移动开发调试是很重要的哦~

http://people.apache.org/~pmuellr/weinre/docs/latest/images/weinre-demo.jpghttp://people.apache.org/~pmuellr/weinre/docs/latest/images/weinre-demo.jpg

安装weinre

weinre可以通过npm来安装:

1
npm install -g weinre

安装完之后,可执行下面的命令来启动:

1
weinre --httpPort 8080 --boundHost -all-


这样访问自己的127.0.0.1:8080按照提示在需要调试页面中插入一段js,然后就可以调试了。操作界面类似Chrome的 DevTools,具体操作可以看下http://people.apache.org/~pmuellr/weinre/docs/latest/Running.html教程

原理

通过在需要调试的页面中引入一段weinre的js,实现pc和手机的socket通信,从而实现实时调试。

Tips

  1. 如果你嫌每次都要在调试的页面引入js麻烦,可以做个书签或者chrome插件
  2. 如果嫌安装麻烦,可以使用phonegap的weinre:http://debug.phonegap.com/

DOM断点

DOM断点是一个Firebug和chrome DevTools提供的功能,当js需要操作打了断点的DOM时,会自动暂停,类似debugger调试。

使用DOM断点

  1. 选择你要打断点的DOM节点
  2. 右键选择Break on..
  3. 选择断点类型

DOM断点DOM断点

Tips

  • Firebug中,DOM断点可以在Script> Breakpoints里面看到
  • chrome DevTools中,需要在Elements面板的DOM Breakpoints中看到

javascript的debugger语句

需要调试js的时候,我们可以给需要调试的地方通过debugger打断点,代码执行到断点就会暂定,这时候通过单步调试等方式就可以调试js代码

使用javascript的断点

在需要打断点的地方添加debugger

1
2
3
if (waldo) {
debugger;
}

这时候打开console面板,就可以调试了

Tips

如果你不知道怎么调试,那么尽快看下:Chrome DevTools中断点部分的教程

原生代码的hook调试

因为浏览器自己会内置一些类似window对象这些原生的js方法,当你知道原生代码的确有问题,但是你又不能跟踪调试的时候,你就可以用这个方法了。

举个例子

例如我们注意到了一个DOM的属性值发生了变化,但是我们不知道是哪里的代码导致的变化,所以我们可以给DOM元素的setAttribute打个断点,代码如下:

1
2
3
4
5
6
7
8
var oldFn = Element.prototype.setAttribute;

Element.prototype.setAttribute = function (attr, value) {
    if (value === "the_droids_you_are_looking_for") {
        debugger;
    }
    oldFn.call(this, attr, value);
}

这样,当元素的属性发生了变化的时候,就会执行到断点,你就可以在断点的栈中找出调用的地方来~

Tips

这种方法不保证在所有浏览器中有效,比如ios的safari 隐私模式下,我们就不可以修改localStorage方法

远程映射本地调试

当线上某个js/css出现问题,我们可以用代理的方式,将远程的文件代理到本地来实现远程映射调试。其实除了这个功能,还可以作为抓包工具,这在移动端是很重要的。推荐Mac用charles Proxy(http://www.charlesproxy.com/), windows用户使用fiddler(http://fiddler2.com/)

这个就不多说了,直接上国内的几篇文章:

  • http://www.cnblogs.com/tankxiao/archive/2012/02/06/2337728.html
  • http://www.cnblogs.com/TankXiao/p/3063871.html

原文阅读(本文没有完全翻译,有所扩展):http://techblog.badoo.com/blog/2013/11/18/5-advanced-javascript-and-web-debugging-techniques-you-should-know-about/

相关文章:

  • 12 款最好的 Bootstrap 设计工具
  • 设置Jetty服务器的cookie为secure和httponly
  • XSS与HTTP-only Cookie 脚本获取JSESSIONID的方法
  • DNS 安全信息 (微软)
  • DNS安全 -月宫吴刚
  • ldap 身份验证的通用步骤
  • Openssl多个安全补丁简易分析危害及修复方案
  • Redhat Linux 安全设置脚本
  • nginx中shell脚本封锁采集IP地址
  • Apache和Tomcat限制文件访问或下载
  • Postgresql默认用户名与密码
  • Oracle default SID list
  • Apache服务器禁用TRACE Method防范XSS跨站攻击
  • 网页自适应不同浏览设备的方法
  • 网站降权了魔术收录法帮你恢复收录
  • Koa2 之文件上传下载
  • PHP 7 修改了什么呢 -- 2
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Service Worker
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​虚拟化系列介绍(十)
  • #NOIP 2014#Day.2 T3 解方程
  • #图像处理
  • %@ page import=%的用法
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (理论篇)httpmoudle和httphandler一览
  • (七)Java对象在Hibernate持久化层的状态
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)http-server应用
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net CHARTING图表控件下载地址
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET框架
  • .net中应用SQL缓存(实例使用)
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • .sh
  • .stream().map与.stream().flatMap的使用
  • .ui文件相关
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @基于大模型的旅游路线推荐方案
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [C++]:for循环for(int num : nums)
  • [CTO札记]如何测试用户接受度?
  • [C语言]——函数递归
  • [Java][Android][Process] 暴力的服务能够解决一切,暴力的方式运行命令行语句
  • [Linux] CE知识随笔含Ansible、防火墙、VIM、其他服务