js中的错误提示浅析 ( titanium js errors)
访问量: 2740
Titanium的框架特性,以及js的语言特性,决定了 Titanium js 中的代码有时候报错难以排查。
解决办法:(置顶)
1. 靠经验。
2. 使用git . 写一点儿代码就提交一点代码。 多用 $ git diff 命令。
3. 希望 js / titanium的报错机制更好一些。 titanium 中,ios的报错信息比android 的要好很多。
详细说明:
例如,有时候会报错:
'me' is undefined. 或者: xx error at /usr/lib/ooxx/..../lib.so
而造成这个错误的原因,很可能是 Alloy View中 id = 3 , 或者 是 某个变量名和它所在的方法名重名 等等原因造成的。
为什么会这样呢? 这就是 因为js 代码本身的运行机制造成的。 比如,有2个js 代码片段,我们假设它们分别是 1.js, 2.js:
// 1.js: 假设我们按照 元编程的 方式,动态声明3个变量: // a1 = createUIButton1() // a2 = createUIButton2() // a3 = createUIButton3() // ( 下面代码用 ruby 代码表示)然后, 某个情况下,代码出错: [1,2,3].each |i| throw e if i == 2 define_variable "a#{i}", send("createUIButton#{i}") end
然后,我们在 2.js 中对 1.js 进行引用:
a = 'lalala' eval(File.read(1.js)) c = 'ddd'
然后,在 object c 代码中进行调用时,就会发现出错:
出错提示是难以阅读的,好像上面写的那样。// MAC: oc code EvalJs(File.read(2.js))
这就是js的语言特性造成的。 js 语言的能力比ruby差了不少,在元编程时提现的更加明显。 在ruby中,虽然也会有 eval 时无法准确提供出错代码的行数问题,但是ruby 允许作者来针对某个eval设置更加精确的提示消息,也能看到大概的行数。