Back

一次调试Titanium的经历 (a titanium debug )

发布时间: 2015-01-09 05:44:00

现在知道了: 不能在 mobile web中调试 native interface, 比如 ListView 

有个bug, 我们无从查起。困扰了项目组2周了。

之前都是在 android/ios上运行的 app, 结果错误一出,根本无从下手。

Error

查看log 也查不到有用的内容。 都是框架抛出的错误。

今天使用了  mobile-web来启动 , ( $ ti build --platform mobileweb ) ,就可以在chrome 的developtools中看到调用堆栈了。

Vm Xxx In Chrome Js Console

然后一点一点的排查,发现到了 VM2002 的 414行。 

    $.__views.__alloyId147.add($.__views.__alloyId149);
    go_to_zhang_fu ? $.__views.__alloyId149.addEventListener("click", go_to_zhang_fu) : __defers["$.__views.__alloyId149!click!go_to_zhang_fu"] = true;

# 414 line:  
    $.__views.zhang_fu_section = Ti.UI.createListSection({
        headerView: $.__views.__alloyId147,
        id: "zhang_fu_section"
    });

于是 搜索源代码, 发现 alloyId147 存在于 app/controller/home.js中。并且就在它的 411 行。 

p.s. 可以发现, alloy 框架在生成js文件时, 为每个controller 都加了一个wrapper: 

// 整个文件是 Titanium 根据 Alloy 生成的代码
(function(__vars
/**/) {
var require=__vars.require,exports=__vars.exports,module=__vars.module;

这里是 alloy 根据你的 controller js 生成的代码。  

;return {require:require,exports:exports,module:module};
})

现在,我深深体会到了 元编程是把 双刃剑。 调试起来太麻烦了。不过这也正是 强大框架的特点所在。

不过,目前这个BUG还没有调试出来。  

所以,只要一点一点的注释代码。 把疑似有问题的代码去掉。

发现问题 出在 <ListView>的 <ListSection>上。

Back