BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #34726同步于 2009/6/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

[合集] IE下有没有办法获取异常发生所在的行数?

FadeToBlack
2009/6/3镜像同步4 回复
☆─────────────────────────────────────☆ Keyman (KISS) 于 (Sun Sep 14 14:43:36 2008) 提到: firefox下异常有个lineNumber我知道,但是IE下不知道怎么弄 抛异常IE状态栏也会显示哪一行出错了,应该是有办法获取的才是 我指的是在Javascript里面捕获异常的时候获取行数 ☆─────────────────────────────────────☆ atian25 (天猪天狗|阿天) 于 (Sun Sep 14 16:48:51 2008) 提到: firebugs for ie 还有个微软出的 IE Developer Toolbar Microsoft Script Debugger —— Companion.JS need to install this Companion.JS —— Javascript debugger for IE , like Console API feature IE Developer Toolbar —— Like Firebug (DOM/CSS etc) Fiddler —— Web Debugging Proxy ☆─────────────────────────────────────☆ Keyman (KISS) 于 (Mon Sep 15 16:20:23 2008) 提到: 不好意思,我没说清楚,是说在javascript里头知道异常发生的所在行数 ☆─────────────────────────────────────☆ atian25 (天猪天狗|阿天) 于 (Mon Sep 15 20:45:39 2008) 提到: javascript同java一样,都有异常处理机制。在javascript中,也是用try...catch来进行异常处理。例如: try { fo.bar(); } catch (e) { alert(e.name + ": " + e.message); } 目前我们可能得到的系统异常主要包含以下6种: * EvalError: raised when an error occurs executing code in eval() * RangeError: raised when a numeric variable or parameter is outside of its valid range * ReferenceError: raised when de-referencing an invalid reference * SyntaxError: raised when a syntax error occurs while parsing code in eval() * TypeError: raised when a variable or parameter is not a valid type * URIError: raised when encodeURI() or decodeURI() are passed invalid parameters 上面的六种异常对象都继承自Error对象。他们都支持以下两种构造方法: new Error(); new Error("异常信息"); 每当产生运行时错误,就产生 Error 对象的一个实例以描述错误。该实例有两个固有属性保存错误的描述(description 属性)和错误号(number 属性)。 Error 对象也可以用如上所示方法显式创建,或用 throw 语句抛掉。在两种情况下,都可以添加选择的任何属性,以拓展 Error 对象的能力。 手工抛出异常的方法如下: try { throw new Error("Whoops!"); } catch (e) { alert(e.name + ": " + e.message); alert(e.name + ": " + e.description);//IE中两者结果一样,都是Whoops! } 如要判断异常信息的类型,可在catch中进行判断: try { fo.bar(); } catch (e) { if (e instanceof EvalError) { alert(e.name + ":" + e.message); } else if (e instanceof RangeError) { alert(e.name + ": " + e.message); } // etc } Error具有下面一些主要属性: * description: 错误描述 (仅IE可用). * fileName: 出错的文件名 (仅Mozilla可用). * lineNumber: 出错的行数 (仅Mozilla可用). * message: 错误信息 (在IE下同description) * name: 错误类型. * number: 错误代码 (仅IE可用). * stack: 像Java中的Stack Trace一样的错误堆栈信息 (仅Mozilla可用). 因此为了更好的了解错误信息我们可以将catch部分改为如下形式: try { fo.bar(); } catch (e) { if (browserType != BROWSER_IE) { alert("name: " + e.name + "message: " + e.message + "lineNumber: " + e.lineNumber + "fileName: " + e.fileName + "stack: " + e.stack); } else { alert("name: " + e.name + "errorNumber: " + (e.number & 0xFFFF ) + "message: " + e.message"); } } JavaScript中的throw命令事实上可以抛出任何对象,并且我们可以在catch接受到此对象。例如: try { throw new Date(); // 抛出当前时间对象 } catch (e) { alert(e.toLocaleString()); // 使用本地格式显示当前时间 } 要经常使用try...catch来解决运行是异常。 ☆─────────────────────────────────────☆ atian25 (天猪天狗|阿天) 于 (Mon Sep 15 20:46:54 2008) 提到: Error具有下面一些主要属性: * description: 错误描述 (仅IE可用). * fileName: 出错的文件名 (仅Mozilla可用). * lineNumber: 出错的行数 (仅Mozilla可用). * message: 错误信息 (在IE下同description) * name: 错误类型. * number: 错误代码 (仅IE可用). * stack: 像Java中的Stack Trace一样的错误堆栈信息 (仅Mozilla可用). 按这个来说,IE似乎是没办法. 或者你去研究下firebugs for ie的源码看看 ☆─────────────────────────────────────☆ ericyosho (ericyosho) 于 (Mon Sep 15 20:48:06 2008) 提到: IE不支持 lineNumber 和 fileName 这两个属性。 VS里面支持的行数的显示,感觉不是 javascript 内置的东西,更像是通过外部的小程序数出来的。 纯感觉…… ☆─────────────────────────────────────☆ Keyman (KISS) 于 (Mon Sep 15 22:19:57 2008) 提到: 谢谢ls两位. 唉,做web开发,最讨厌的就是IE了 ☆─────────────────────────────────────☆ coolwc (北邮の包子) 于 (Wed Sep 17 11:57:04 2008) 提到: tz讲的是王道 如果你想捷径解决问题的话请双击ie左下角的黄色小角落 【 在 Keyman (KISS) 的大作中提到: 】 : firefox下异常有个lineNumber我知道,但是IE下不知道怎么弄 : 抛异常IE状态栏也会显示哪一行出错了,应该是有办法获取的才是 ☆─────────────────────────────────────☆ Keyman (KISS) 于 (Thu Sep 18 22:39:30 2008) 提到: 【 在 coolwc 的大作中提到: 】 : tz讲的是王道 : 如果你想捷径解决问题的话请双击ie左下角的黄色小角落 ?? 我Javascript怎么双击那个黄色小角落??可能你没明白我说的意思吧. ☆─────────────────────────────────────☆ coolwc (北邮の包子) 于 (Fri Sep 19 10:20:14 2008) 提到: 你只是想知道哪一行代码出了问题嘛 在不用调试器的情况下 两招 1 ie自带的那个 左下角黄色小角落 会反馈出一定的错误信息和行号 但是我基本不参照了 因为这个行号很不准确 2 自己用alert定位 2分法 也能快速找到问题所在行 除此以外 可以用vs来做调试器 具体方法是用vs的attach to process 插入到ie处理js的线程中去 具体的自己baidu吧 【 在 Keyman (KISS) 的大作中提到: 】 : ?? : 我Javascript怎么双击那个黄色小角落??可能你没明白我说的意思吧. ☆─────────────────────────────────────☆ atian25 (天猪天狗|阿天) 于 (Fri Sep 19 10:30:45 2008) 提到: firebug for ie 是王道. http://getfirebug.com/lite.html ☆─────────────────────────────────────☆ ericyosho (ericyosho) 于 (Fri Sep 19 10:58:51 2008) 提到: 你们都理解错了,LZ的意思不是要调试用和除错用。 是要实现一个调试器的功能,在执行到哪一行的时候,异常了。 他想把那个行号给打印出来,或者得到。 ☆─────────────────────────────────────☆ atian25 (天猪天狗|阿天) 于 (Fri Sep 19 11:12:38 2008) 提到: 所以我说,下载firebug for ie那段js,自己分析源码,看它是怎么办到的. 或者说它没能办到,那你也就别想了 ☆─────────────────────────────────────☆ Yandere (UN|A99) 于 (Fri Sep 19 11:25:12 2008) 提到: 【 在 atian25 的大作中提到: 】 : 所以我说,下载firebug for ie那段js,自己分析源码,看它是怎么办到的. : 或者说它没能办到,那你也就别想了 +1 要好好利用开源的东西啊 就算不开源,也可以反编译啊 ☆─────────────────────────────────────☆ Keyman (KISS) 于 (Fri Sep 19 16:27:41 2008) 提到: 【 在 ericyosho 的大作中提到: 】 : 你们都理解错了,LZ的意思不是要调试用和除错用。 : 是要实现一个调试器的功能,在执行到哪一行的时候,异常了。 : 他想把那个行号给打印出来,或者得到。 恩,对,就是这个意思,唉,我表达能力就这么不行么~ 谢谢atian25的建议,我现在正在分析那段脚本 ☆─────────────────────────────────────☆ Shinpachi (让世界变得更囧的怪阿姨守护团--新八) 于 (Fri Sep 19 17:27:52 2008) 提到: 【 在 Keyman 的大作中提到: 】 : 恩,对,就是这个意思,唉,我表达能力就这么不行么~ : 谢谢atian25的建议,我现在正在分析那段脚本 在我看来,是所有人都明白你说什么,只是你不明白别人让你做什么而已,最后让tz来道破 ☆─────────────────────────────────────☆ diysimon (I'm Forain) 于 (Fri Sep 19 18:44:01 2008) 提到: IE下的调试其实用vs.net也挺好的。。。就是太大了。。 ☆─────────────────────────────────────☆ atian25 (天猪天狗|阿天) 于 (Fri Sep 19 22:05:15 2008) 提到: 不用分析了,我下午的时候简单看了下,似乎firebug for ie 功能太弱了. 不能调试js的,只能查看. 点击那个linenumber才能看行数,应该是计算出来的,不准确. 其实,要问下你的需求限制了一定要用js本身来做么? ☆─────────────────────────────────────☆ atian25 (天猪天狗|阿天) 于 (Fri Sep 19 22:06:29 2008) 提到: Microsoft Script Debugger —— Companion.JS need to install this Companion.JS —— javascript debugger for IE , like Console API feature IE Developer Toolbar —— Like Firebug (DOM/CSS etc) Fiddler —— Web Debugging Proxy 我在一楼给出的这些,你可以去看看. 不过我不知道是不是开源的.只用过第三个. ☆─────────────────────────────────────☆ atian25 (天猪天狗|阿天) 于 (Fri Sep 19 22:09:31 2008) 提到: 不然就等待IE8吧, ie8beta2: 新的开发工具:之前IE开发者工具栏里的工具已经直接集成在浏览器本身,并且进行了功能扩展,可以帮助开发人员迅速在可视化环境里调试HTML、CSS、JScript。 ☆─────────────────────────────────────☆ atian25 (天猪天狗|阿天) 于 (Thu Sep 25 23:03:06 2008) 提到: 似乎可以找到... 试下这段代码 <script type="text/javascript"> window.onerror=testError; function testError(){ arglen=arguments.length; var errorMsg="参数个数:"+arglen+"个"; for(var i=0;i<arglen;i++){ errorMsg+="\n参数"+(i+1)+":"+arguments[i]; } alert(errorMsg); window.onerror=null; return true; } function test(){ error } test() </script> ☆─────────────────────────────────────☆ Keyman (KISS) 于 (Fri Sep 26 13:49:07 2008) 提到: 【 在 atian25 的大作中提到: 】 : 似乎可以找到... : 试下这段代码 : <script type="text/javascript"> : ................... 赞 非常感谢tz的帮助~ ☆─────────────────────────────────────☆ atian25 (天猪天狗|阿天) 于 (Fri Sep 26 14:13:58 2008) 提到: 客气,昨天怠工的时候不小心看到一段分析extjs的源码的,就有这个onerror ☆─────────────────────────────────────☆ mico (btchuan) 于 (Mon Nov 24 19:04:29 2008) 提到: include进来的可以吗?
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
Keyman机器人#1 · 2009/6/9
总结了一下 http://www.54kevinyang.cn/2009/05/javascript%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%87%BA%E9%94%99%E4%BB%A3%E7%A0%81%E6%89%80%E5%9C%A8%E6%96%87%E4%BB%B6%E5%8F%8A%E8%A1%8C%E6%95%B0.html
FadeToBlack机器人#2 · 2009/6/9
可以,你都回了 【 在 Keyman (KISS) 的大作中提到: 】 : 可以回帖不?
atian25机器人#3 · 2009/6/10
extjs3 的debug console 似乎不错
Keyman机器人#4 · 2009/6/10
extjs都出3了,还真是快,当时用的时候还是1.1的版本