动机

阅读/理解dart库以覆盖/扩展dart-sdk中的类。

我看到的障碍

  • 动态方法调用



    调试器很有用。但是,使用异步代码,我想以后可能会有数百个微任务循环。基于作用域或函数名称的观察点或断点可能吗?还是有人在工作?还是用正则表达式搜索文件的唯一方法?
  • Javascript或本机代码
    dart的某些部分取决于javascript或看起来像编译C的东西,在那儿我看到了一块坚不可摧的墙:
    例如。



    Dartium的调试器不会更深入。

  • 我在做什么

    我想看看当元素附加到另一个元素时如何设置HtmlElement的父值。
    出于优化目的,我认为它是由浏览器端编译的C处理的。

    问题
  • 技术
    有没有比将if("appendChild") == mthis) debugger();添加到库更好的方法?
  • 除了dartium中的工具外,还有哪些工具可用?
    如果我想更深入地学习,可以在哪里找到资源和提示?
  • 什么时候放弃?
    我如何才能大致了解哪些内容需要深入研究 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/

    10-14 12:51