动机
阅读/理解dart库以覆盖/扩展dart-sdk中的类。
我看到的障碍
调试器很有用。但是,使用异步代码,我想以后可能会有数百个微任务循环。基于作用域或函数名称的观察点或断点可能吗?还是有人在工作?还是用正则表达式搜索文件的唯一方法?
dart的某些部分取决于javascript或看起来像编译C的东西,在那儿我看到了一块坚不可摧的墙:
例如。
Dartium的调试器不会更深入。
我在做什么
我想看看当元素附加到另一个元素时如何设置HtmlElement的父值。
出于优化目的,我认为它是由浏览器端编译的C处理的。
问题
有没有比将
if("appendChild") == mthis) debugger();
添加到库更好的方法? 如果我想更深入地学习,可以在哪里找到资源和提示?
我如何才能大致了解哪些内容需要深入研究 Chrome 源代码?还是只需要尝试看看?
最佳答案
断点有所限制,但是当您看到_blink库中的callMethod(mthis, "appendChild", ...)
恰好用接收者appendChild
调用JavaScript方法mthis
时。并且您将看到关于wrap_jso和unwrap_jso的调用,这些调用正在将Dart包装器添加或添加到基础JavaScript对象。从1.14开始,(几乎?)Dartium中的所有HTML调用都是通过JS Interop完成的。
如果您真的想知道C代码在这两者之间的作用,请在SDK checkout 中查找js_dartium.dart。但是对于大多数目的来说,足以知道它正在执行所声明的操作并调用JS。您还可以在devtools中的JS端设置一个断点,并通过这种方式来解决。
对于技术-您可以在眨眼库或html中设置断点,但是没有任何元断点功能。您还可以查看未缩小的dart2js输出,以了解实际情况,因为它应该非常相似。除了运行Dartium或查看源代码外,没有太多可用的工具或资源。 sdk/tools/dom
。大部分html_dartium和所有_blink都是使用Chrome IDL文件中的Python脚本生成的。
要回答您的原始问题-我很确定它已经在从JavaScript调用的浏览器C代码中设置了。 Dart与它无关。
关于dart - 如何有效使用dartium和其他工具来读取/调试客户端dart库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35221263/