繁体   English   中英

如何有效使用dartium和其他工具来读取/调试客户端dart库?

[英]How to use dartium and other tools effectively to read / debug client side dart library?

动机

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

我看到的障碍

  • 动态方法调用
    例如

    appendChild_Callback_1_(mthis,__arg_0)=> Blink_JsNative_DomException.callMethod(mthis,“ appendChild”,[__ arg_0]);

    调试器很有用。 但是,使用异步代码,我想以后可能会有数百个微任务循环。 基于作用域或函数名称的观察点或断点可能吗?
    还是有人在工作? 还是用正则表达式搜索文件的唯一方法?

  • Javascript或本机代码
    dart的某些部分取决于javascript或看起来像编译C的东西,在那儿我看到了一块坚不可摧的墙:
    例如

    _callMethod(字符串名称,列表参数)原生“ JsObject_callMethod”;

    Dartium的调试器不会更深入。

我在做什么

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

问题

  • 技术
    有没有比添加if("appendChild") == mthis) debugger();更好的方法了if("appendChild") == mthis) debugger(); 去图书馆?
  • 除了dartium中可用的工具以外,还有哪些可用的工具?
    如果我想更深入地学习,可以在哪里找到资源和提示?
  • 什么时候放弃?
    我如何大致了解需要深入研究铬源代码的东西? 还是只需要尝试看看?

断点有所限制,但是当您看到_blink库中的callMethod(mthis, "appendChild", ...)恰好以接收者mthis调用JavaScript方法appendChild时。 并且您将看到关于它的wrap_jso和unwrap_jso调用,这些调用正在将Dart包装器添加或添加到基础JavaScript对象。 从1.14开始,(几乎?)Dartium中的所有HTML调用都是通过JS Interop完成的。

如果您真的想知道C代码在这之间的作用,请在SDK签出中查找js_dartium.dart。 但是对于大多数目的来说,足以知道它正在执行所声明的操作并调用JS。 您还可以在devtools的JS端设置一个断点,并通过这种方式来解决。

对于技术-您可以在眨眼库或html中设置断点,但是没有任何元断点功能。 您还可以查看未缩小的dart2js输出,以了解实际情况,因为它应该非常相似。 除了运行Dartium或查看源代码外,没有太多可用的工具或资源。 sdk/tools/dom 大部分html_dartium和所有_blink都是使用Chrome IDL文件中的Python脚本生成的。

要回答您的原始问题-我很确定它已经在从JavaScript调用的浏览器C代码中设置了。 Dart与它无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM