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

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

动机

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

我看到的障碍

我在做什么

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

问题

断点有点受限,但是当你看到_blink 库中的callMethod(mthis, "appendChild", ...) 正好调用JavaScript 方法appendChild 和接收者mthis。你会看到围绕它的 wrap_jso 和 unwrap_jso 调用,它们正在为底层的 JavaScript 对象移除或添加 Dart 包装器。从 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 脚本生成的。

回答你原来的问题 - 我很确定它是在浏览器 C 代码中设置的,从 JavaScript 调用。 Dart 与它无关。