返回信息流☆─────────────────────────────────────☆
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进来的可以吗?
这是一条镜像帖。来源:北邮人论坛 / soft-design / #34726同步于 2009/6/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
[合集] IE下有没有办法获取异常发生所在的行数?
FadeToBlack
2009/6/3镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
总结了一下
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