`

不依赖浏览器控制台的JavaScript断点调试方法

 
阅读更多

文章源自:http://soft.chinabyte.com/database/326/12776826.shtml

 

随着浏览器的逐渐强大,绝大多数情况下的代码调试都是可以通过浏览器自带的一些调试工具进行解决。然而对于一些特殊情况仍然无法享受到浏览器的强大 调试能力,比如QQ客 户端内嵌web的调试(虽然说QQ目前已经可以编译开发者工具,但是仍需要安装指定文件包或工具)、非正常浏览器web、移动场景下 的内嵌等场景。 基于这个场景我们团队已经在nohost下引入了weinre,并得到了广泛的使用。 但是weinre是有一定的局限性,只能做到console.log和DOM查看等,不能支持断点调试。这里之前老文章已经有过一些描述,可参见 http://www.webryan.net/2013/04/talk-about-remote-debugging-on-mobile- phone/。

 本文重点讲解不依赖浏览器控制台能力,单纯通过JavaScript方式来实现断点调试的能力,为大家解决问题提供另一种思路和方法。首先会给出工具的使用方法,让大家有感性认识,然后再讲解具体实现原理。

  【测试使用】

 

  1、cmd命令下执行”npm install breakpoint -g”(npm安装不赘述,-g为了全局安装且注册bin命令)

 

  2、cmd命令行下执行”breakpoint”(会给出使用帮助,并默认启动测试目录:可以直接通过URL访问);

 

  3、开启两个现代浏览器如chrome和safari,分别打开提示的两个URL。



 好了,简单三步就可以在浏览器里测试了。这个ui/index.html操作方法如下:




 是不是很简单:),下面我们来给出实战例子;

  【实战使用】

 

  【参数说明】

 

  Usage: breakpoint -d htdocsDir -r passbyRule

 

  -d 指定本地静态目录,这里的HTML文件head里会被注入调试脚本。

 

  -r 指定透传规则,通常用于将CGI请求透传给现网服务器;如果是需要透传给指定服务器,则需要在本地hosts文件中做一下指向;

 

  -h 当存在多网卡的情况下,可以使用-h指定某一IP;

 

  breakpoint执行后会在本地启用3个端口,80(用于提供访问服务)、8000(用于控制器)、8500(用于文件重写);

 

  【实战举例】

 

  假设我们域名是:abc.com;本地静态文件(HTML、CSS和 JS等)目录是:e:\svn\trunk\htdocs\,那么可以通 过”breakpoint -d e:\svn\trunk\htdocs”将所有的请求转发到本地目录,比如:http://abc.com/a.html会返回本地目录e:\svn \trunk\htdocs\a.html的内容。

 

 但是此时直接在浏览器中访问abc.com是不行的,需要先通过fiddler等工具将abc.com指向本地IP(参考Step 1的)。



 然后再访问 http://10.64.53.85:8000/ui/index.html 打开控制器;访问:http://abc.com/a.html 访问资源内容。



 

不难发现,访问内容已经成功走了本地,且自动在头部加上了调试脚本,这就搞定了。

  但是往往调试的时候,我们又希望某些文件访问现网资源或者其他服务器的资源,这个时候,可以通过-r参数来正则匹配放过对应的请求。比 如:abc.com指向本地IP后,希望abc.com/cgi-bin/下的所有请求都发送到现网。 那么只需要执行”breakpoint -d e:\svn\trunk\htdocs\ -r cgi-bin”即可。

 

  【原理分析】

 

  如何通过JavaScript来实现断点调试?

 

  断点调试的核心问题就是要让脚本在某行代码暂停执行,那么Aleksander Kmetec同学给出的解决方案是:通过在每行JavaScript前面加一个断点函数。而断点函数是 通过AJAX的同步属性来阻塞浏览器。

 

  那么JavaScript修改前后的情况如下:

 

  修改前修改后

 

  var a = 1;

 

  var b =2;

 

  function test(){

 

  var c = ‘init’;

 

  c=’change’;

 

  }Break();var a = 1;

 

  Break();var b =2;

 

  Break(); function test(){

 

  Break(); var c = ‘init’;

 

  Break(); c=’change’;

 

  }

 

  这样通过break函数里发起同步AJAX请求即可确定断点位置和阻塞浏览器执行后面的脚本了,真是很聪明的做法。

 

  【breakpoint结构图】



 

       1、通过浏览器发起网页请求;

  2、请求通过fiddler等方式指向到我们的重写服务,重写服务根据请求链接来处理流程。如果是匹配了-r的正则规则,则直接转发到现网服务器,否则则请求本地-d目录下的内容。

 

  3、透传的内容直接不处理,其他的内容会判断:1、HTML文件则会默认在head第一行加入调试脚本的script(该脚本包括调试所需要的方法,如break();) 2、JS文件则会在每一行脚本前增加break();函数的调用。

 

  4、重写服务返回数据给浏览器

 

  5、当浏览器执行JS的时候,会先遇到break();则发起同步的XHR请求,阻塞住浏览器的执行。

  6、如果通过调试服务UI界面设置过断点,调试服务则会hold住在break()里的XHR请求,直到调试服务UI发出新的命令(比如跳过、下一行等)。

  • 大小: 26.2 KB
  • 大小: 9.4 KB
  • 大小: 42.7 KB
  • 大小: 10.6 KB
  • 大小: 9.3 KB
  • 大小: 17.5 KB
  • 大小: 45.3 KB
  • 大小: 25.7 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Android IOS WebRTC 音视频开发-调试技巧

    - **Console.log**: 使用 JavaScript 的 `console.log()` 方法可以在浏览器控制台输出调试信息。 - **Wireshark**: 对于网络层的调试,可以使用 Wireshark 这样的工具来捕获网络数据包,分析信令交互和媒体流传输...

    IE下的JAVASCRIPT调试

    而调试JavaScript代码是开发者日常工作中不可或缺的环节。本文将深入探讨如何在Internet Explorer(IE)浏览器下进行JavaScript的调试,这对于那些仍需兼容IE的项目至关重要。 标题"IE下的JAVASCRIPT调试"直指主题...

    调试Javascript代码(浏览器F12及VS中debugger关键字)

    调试JavaScript代码主要依赖于浏览器的开发者工具,例如IE、Chrome和Firefox的F12开发人员工具,以及Visual Studio (VS) 的集成调试环境。本文将详细介绍如何在这些环境中使用`debugger`关键字进行调试。 首先,`...

    Linux 桌面玩家指南:19. 深入理解 JavaScript,及其开发调试工具 - 京山游侠 - 博客园1

    它提供了查看和修改变量、运行单行代码、查看调用堆栈、断点调试等功能。在Ubuntu中,可以通过`sudo apt-get install chromium-browser`命令安装Chromium。 ### 总结 JavaScript作为Web开发的核心语言,其理解和...

    web开发调试方法

    在web开发过程中,调试是必不可少的一个环节,它帮助开发者找出并修复代码中的错误,提高软件的质量和稳定性。本文将深入探讨web开发的调试方法,包括常见的工具、技巧以及如何有效地利用它们来提升开发效率。 首先...

    Firebug 调试javascript教程

    它不仅能够帮助开发者调试JavaScript和CSS,还提供了网页编辑、性能监控等功能,成为前端开发者不可或缺的利器。本文将基于Firebug 1.5版本,深入探讨其在编辑、调试和监控网页方面的能力,为读者提供一份详尽的使用...

    Mobile_Debugging_调试小结

    2. 第三方工具如Firebug Lite可以在不支持原生开发者工具的浏览器上提供类似Firebug的功能,帮助开发者进行JavaScript调试。 3. 将调试脚本封装成书签,可以在不同浏览器上快速启用,这种方法兼容性较好,但性能有限...

    JavaScript错误与异常处理

    JavaScript错误与异常处理是编程实践中不可或缺的部分,尤其是在JavaScript这样的脚本语言中,错误处理显得尤为重要。JavaScript中的错误分为两种主要类型:语法错误和运行错误。语法错误,也称为错误(Error),是...

    js调试工具debug

    2. **断点调试**:在源代码中设置断点可以让程序在特定行暂停,这样开发者就能查看当前状态,包括变量值、调用堆栈等。在代码行号前点击即可设置或移除断点。 3. **步进执行**:在调试过程中,可以使用`Step Over`...

    java script 的调试

    现代浏览器如Chrome、Firefox、Safari等都提供了强大的开发者工具,其中包含专门用于JavaScript调试的功能。通过这些工具,开发者可以设置断点、查看变量值、执行单步调试等,极大地简化了调试过程。 #### 2. 使用...

    详解使用Visual Studio Code对Node.js进行断点调试

    下面我们将详细探讨如何在VSCode中设置和使用断点调试Node.js应用。 首先,确保你已经在本地安装了Node.js环境,因为这是运行和调试Node.js应用的基础。安装过程通常涉及下载官方安装包并按照指示进行操作。如果你...

    consolejs:用js编写的简单轻巧的控制台

    总结来说,"consolejs"是一个为JavaScript开发者提供的轻量级控制台工具,它提供了类似浏览器控制台的功能,可以在多种环境中使用,便于代码调试和测试。通过深入研究其源代码和提供的资源,我们可以学习到更多关于...

    IE6下调试工具-js写的高仿firebug

    1. **源代码查看与断点调试**:用户可以查看和编辑HTML、CSS以及JavaScript源代码,并在代码中设置断点,暂停执行,逐步执行,查看每一步的变化。 2. **控制台输出**:提供一个控制台面板,显示JavaScript的错误...

    Static文件测试调试使用

    可以使用控制台查看JavaScript错误,并使用断点和步进调试来检查代码执行流程。 4. **性能优化**:压缩和合并CSS和JavaScript文件可以减少HTTP请求数量和文件大小,提高页面加载速度。使用工具如Gzip进行文件压缩,...

    javascript调试说明

    总的来说,JavaScript调试是通过浏览器提供的`console`对象及其一系列方法,结合断点、步进执行等手段,来查找并修复代码中的问题。理解并熟练运用这些工具,能够极大地提升开发效率,确保代码的稳定性和性能。

    Javascript教程.rar

    - 使用浏览器的开发者工具进行代码调试,如断点、控制台日志和性能分析。 - Jest或Mocha等测试框架,用于编写和运行单元测试和集成测试,确保代码质量。 9. **性能优化**: - 了解如何减少HTTP请求、优化图片、...

    前端开源库-jsinspector

    它提供了与Chrome DevTools类似的接口,使开发者能够在不依赖特定浏览器的情况下进行调试。 在实际使用中,`jsinspector`通常包括以下关键组件: 1. **Inspector代理**:这是注入到目标网页中的JavaScript代码,...

    IE11浏览器全新功能.docx

    5. **增强的JavaScript调试工具**:支持设置断点,跟踪变量,并实现无需刷新页面的快速启动,提高调试效率。 6. **控制台**:提供丰富的控制台API,便于高级用户进行调试,输出和输入信息更高效。 **五、WebGL支持*...

Global site tag (gtag.js) - Google Analytics