一次调试Titanium的经历 (a titanium debug )
访问量: 2455
现在知道了: 不能在 mobile web中调试 native interface, 比如 ListView
有个bug, 我们无从查起。困扰了项目组2周了。
之前都是在 android/ios上运行的 app, 结果错误一出,根本无从下手。
查看log 也查不到有用的内容。 都是框架抛出的错误。
今天使用了 mobile-web来启动 , ( $ ti build --platform mobileweb ) ,就可以在chrome 的developtools中看到调用堆栈了。
然后一点一点的排查,发现到了 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>上。