Back

js中的错误提示浅析 ( titanium js errors)

发布时间: 2015-05-06 22:05:00

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设置更加精确的提示消息,也能看到大概的行数。

Back