簡體   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