chrome developer tools 的一個 bug

我10月12進入新公司,到現在已經半個月了。

這家公司主要是做移動互聯網產品的,非常適合我,每天都能見識到新東西。

今年五六月份,在好易調試代碼時,發現chrome存在一個莫名其妙的問題,總是毫無緣故地刷新網頁。這個問題後來沒有找到原因,不了了之。這週在新公司調試代碼,又發現chrome的developer tools存在一個bug,並且找出了重現的condition。

1 function loop(){
2     for(var key in undefined){        //we add a break-point here,but it doesn‘t break at this line
3         var item=undefined[key];    //it will never get into this loop,cause of value undefined has no key-value pairs in it
4         console.log(item);
5     }
6 }
7 loop();                                //add a break point here,it works
8 console.log("here we get the end");

上面的代碼,如果在chrome中調試,並且在第2行打斷點,結果會發現斷點根本不起作用。

代碼分析:

  1. for(var key in undefined){ 這個循環根本不會執行到內部去,因為undefined不存在任何k-v對。
  2. 在runtime判斷undefined是否有k-v對之前,第2行應該可以interrupt的。

實際的情況又是怎樣的呢?在Firefox中,第3行不該進去卻進去了,但是這樣是沒有危害的。在chrome中,第2行應該interrupt,卻沒有,跳過去了。

chrome的這個特殊行為,給代碼調試帶來了非常惱火的麻煩。我們在第2行打了斷點,結果卻沒有按照預期停下來,一般情況下,我們會認為原因是,程序在此前就因為exception而停止了。但是查看控制台,卻沒有關於exception的任何信息,相反,卻能看到第8行被執行了。初次遇到該故障的程序員,可能一時間丈二和尚摸不著頭腦。要搞明白這個問題,就要花心思去調試和試驗,可能一折騰就是半天。

對策:

  1. 在chrome中有問題,換Firefox試試看,表現是否一致
  2. 在循環的前面加 alert ,看看是否已經進入該method

我暫時就只能想到這麼兩點而已,如果誰有剛好的經驗,望賜教。

时间: 2024-11-12 19:38:20

chrome developer tools 的一個 bug的相关文章

Google Chrome Developer Tools

原文:https://www.oschina.net/p/chromedevtools Google发布了Google Chrome Developer Tools,这是一系列面向Chrome开发者的工具包. Google Chrome Developer Tools使用BSD授权开源发布,由SDK和Debugger两部分组成.SDK提供了通过TCP/IP协议与Chrome通讯的Java API.而Debugger是一个Eclipse的插件,使用者可以通过Debugger在Eclipse IDE

Enabling Chrome Developer Tools inside Postman

Chrome's Developer Tools are an indispensable part of the modern web development workflow. However, accessing them inside the Postman packaged app takes a few steps. To enable them: Type chrome://flags inside your Chrome URL windowSearch for "packed&

优雅且高效的使用Chrome Developer Tools(上)

Abstract:Chrome Developer Tools是前端开发不可缺少的利器,这里介绍几个有趣的Command Line API,使得开发调试过程中,不经意的透露出那点点的优雅. 主要内容: 记录ex的 $_ 记录现任的 $0 简洁的 $(selector) 和 $$(selector) 拷贝Object的 copy(Object) 更优雅的打断点 debug(function) 列出对象的所有属性 dir(objcet) 和 列出事件的getEventListeners(object

优雅且高效的使用Chrome Developer Tools(下)

Abstract:Chrome Developer Tools是前端开发不可缺少的利器,这里介绍几个有趣的Command Line API,使得开发调试过程中,不经意的透露出那点点的优雅. 主要内容: 随意的文件跳转 随意的方法跳转 灵活的断点设置,我要你停你才停 快速打开关闭Console Elements页卡中几个有用的快捷键 指定的XHR断点 快速模拟移动设备 之前有分享到我们可以通过 Command Line API 来提高我们的开发效率.除此之外,还有一些比较有趣的快捷键和调试方法,也

Chrome Developer Tools:Network Panel说明

一.chrome Developer Tools:Network Panel 从网络面板中可以获取很多有用信息,如详细的时间数据,http请求头响应头,cookies,WebSocket数据. 通过分析这些数据,可以知道哪个资源加载耗时最久,谁发起的网络请求,这些对性能优化很有帮助. 这些数据的获取都是通过一个api来完成的,Resource Timing API. 我们不需要知道它的实现原理,只要知道它能提供什么数据即可. 这些数据也可通过chrome浏览器的window.performace

Chrome的开发者工具(Chrome Developer Tools)

按F12 https://developer.chrome.com/devtools/index http://www.w3school.com.cn/html/html_intro.asp http://www.cnblogs.com/QLeelulu/archive/2011/08/28/2156402.html http://wenku.baidu.com/link?url=fz5kfYH9wlEkqHpkPiP7b8Ws4uVQzQaFQEMzroP7jWj4NYq2vx1FLHUfX9

Chrome Developer Tools:Timeline Panel说明

一.Timeline panel 概况 Timeline工具栏可以详细检测出Web应用在加载过程中,时间花费情况的概览.这些应用包括下载资源,处理DOM事件, 页面布局渲染或者向屏幕绘制元素. 如下图,Timeline面板分为四个模块-控制模块,概述模块,火焰图模块,细节模块. 控制模块Control:控制开始记录,停止记录,配置一条记录要抓取信息类型,包括:JS概况,内存,重绘,截图.. 概述模块Overview:页面性能的一个高度总结. 火焰图模块Flame Chart:CPU栈的可视化描述

Chrome Developer Tools之内存分析

可参考: http://www.kazaff.me/2014/01/26/chrome-developer-tools%E4%B9%8B%E5%86%85%E5%AD%98%E5%88%86%E6%9E%90/ http://www.kazaff.me/2014/01/18/chrome-developer-tools%E4%B9%8Btimeline%E9%9D%A2%E6%9D%BF/ http://www.kazaff.me/2014/01/15/chrome-developer-tool

优雅且高效的使用Chrome Developer Tools

上集 下集