Sdílet prostřednictvím


Nativní objekty ladicího programu v rozšířeních JavaScriptu – Aspekty návrhu a testování

Toto téma popisuje aspekty návrhu a testování pro použití nativních objektů ladicího programu v rozšířeních JavaScriptu.

Nativní objekty ladicího programu představují různé konstrukty a chování prostředí ladicího programu. Objekty lze předat (nebo získat v) javascriptových rozšířeních pro manipulaci se stavem ladicího programu.

Informace o rozšíření javascriptového objektu ladicího programu naleznete v tématu Nativní objekty ladicího programu v rozšířeních Jazyka JavaScript.

Obecné informace o práci s JavaScriptem najdete v tématu Skriptování ladicího programu JavaScriptu.

Aspekty návrhu datového modelu ladicího programu

Principy návrhu

Zvažte následující principy, které zajistí, že rozšíření ladicího programu budou prezentovat informace, které jsou zjistitelné, dotazovatelné a skriptovatelné.

  • Informace jsou blízko místa, kde je potřeba. Například informace o klíči registru by se měly zobrazit jako součást místní proměnné, která obsahuje popisovač klíče registru.
  • Informace jsou strukturované. Například informace o klíči registru jsou uvedeny v samostatných polích, jako je typ klíče, seznam ACL klíče, název klíče a hodnota. To znamená, že jednotlivá pole jsou přístupná bez analýzy textu.
  • Informace jsou konzistentní. Informace o popisovačích klíčů registru jsou prezentovány co nejblíže informacím o popisovačích souborů.

Vyhněte se těmto přístupům, které tyto zásady nepodporují.

  • Nevystavujte své položky do jediného plochého kuchyňského umyvadla. Uspořádaná hierarchie umožňuje uživatelům vyhledat informace, které hledají, aniž by předtím vědí, co hledají, a podporuje zjistitelnost.
  • Nepřeveďte klasické rozšíření dbgeng tím, že ho jednoduše přesunete do modelu a přitom budete dál vyvádět obrazovky nezpracovaného textu. To není možné sestavit s jinými rozšířeními a nelze je dotazovat pomocí výrazů LINQ. Místo toho rozdělte data do samostatných dotazovatelných polí.

Pokyny pro pojmenování

  • Velká písmena v názvech polí by měla být PascalCase. Výjimku je možné zvážit u názvů, které jsou široce známé v jiném písmu, jako je jQuery.
  • Nepoužívejte speciální znaky, které by se normálně nepoužívaly v identifikátoru jazyka C++. Vyhněte se například použití názvů, jako je "Celková délka" (která obsahuje mezeru) nebo "[size]" (která obsahuje hranaté závorky). Tato konvence umožňuje snadnější spotřebu ze skriptovacího jazyka, kde tyto znaky nejsou povoleny jako součást identifikátorů, a také umožňuje snadnější spotřebu z příkazového okna.

Pokyny pro uspořádání a hierarchii

  • Neprodlužujte hlavní úroveň oboru jmen ladicího programu. Místo toho byste měli rozšířit existující uzel v ladicím programu tak, aby se informace zobrazovaly tam, kde jsou nejrelevantnější.
  • Neduplikujte koncepty. Pokud vytváříte rozšíření datového modelu, které obsahuje další informace o konceptu, který již existuje v ladicím programu, rozšiřte stávající informace a nesnažte se je nahradit novými informacemi. Jinými slovy, rozšíření, které zobrazuje podrobnosti o modulu, by mělo rozšířit stávající objekt modulu místo vytvoření nového seznamu modulů.
  • Nezávislé příkazy nástroje musí být součástí oboru názvů Debugger.Utility. Měly by být také odpovídajícím způsobem podobor názvů (např. Debugger.Utility.Collections.FromListEntry).

Zpětná kompatibilita a zásadní změny

Publikovaný skript by neměl narušit kompatibilitu s jinými skripty, které na něm závisejí. Pokud je například funkce publikovaná do modelu, měla by zůstat ve stejném umístění a se stejnými parametry, kdykoli je to možné.

Bez použití externích prostředků

  • Rozšíření nesmí vytvořit externí procesy. Externí procesy mohou narušit fungování ladicího programu a budou se chovat nesprávně v různých scénářích vzdáleného ladění (např. vzdálená ladění dbgsrv, vzdálená ladění ntsd a "ntsd -d remotes").
  • Rozšíření nesmí zobrazovat žádné uživatelské rozhraní. Zobrazení prvků uživatelského rozhraní se bude chovat nesprávně ve scénářích vzdáleného ladění a může přerušit scénáře ladění konzoly.
  • Rozšíření nesmí manipulovat s modulem ladicího programu ani s uživatelským rozhraním ladicího programu prostřednictvím nezdokumentovaných metod. To způsobuje problémy s kompatibilitou a bude se chovat nesprávně u klientů ladicího programu s jiným uživatelským rozhraním.
  • Rozšíření musí přistupovat k cílovým informacím pouze prostřednictvím zdokumentovaných rozhraní API ladicího programu. Pokus o přístup k informacím o cíli prostřednictvím rozhraní API win32 selže pro mnoho vzdálených scénářů a dokonce i některé místní scénáře ladění napříč hranicemi zabezpečení.

Žádné použití funkcí specifických pro Dbgeng

Skripty, které mají být použity jako rozšíření, se nesmí spoléhat na funkce specifické pro dbgeng, kdykoli je to možné (například spouštění "klasických" rozšíření ladicího programu). Skripty by měly být použitelné nad jakýmkoli ladicím programem, který je hostitelem datového modelu.

Testování rozšíření ladicího programu

Očekává se, že rozšíření budou fungovat v široké škále scénářů. I když některá rozšíření můžou být specifická pro scénář (například scénář ladění jádra), očekává se, že většina rozšíření bude fungovat ve všech scénářích nebo má metadata označující podporované scénáře.

Režim jádra

  • Živé ladění jádra
  • Ladění výpisu paměti jádra

Uživatelský režim

  • Ladění uživatelského režimu v reálném čase
  • Ladění výpisu stavu systému v uživatelském režimu

Kromě toho zvažte tyto scénáře použití ladicího programu.

  • Ladění více procesů
  • Ladění více relací (např. výpis dat a živé ladění uživatele v rámci jedné relace)

Použití vzdáleného debuggeru

Otestujte správnou operaci pomocí scénářů použití vzdáleného ladicího programu.

  • dbgsrv remotes
  • ntsd vzdálené ovládání
  • ntsd -d vzdálené přístupy

Další informace naleznete v tématu Ladění pomocí CDB a NTSD a aktivace procesového serveru.

Regresní testování

Prozkoumejte použití automatizace testů, která může ověřit funkčnost vašich rozšíření při vydání nových verzí ladicího programu.

Viz také

nativní objekty ladicího programu v rozšířeních JavaScriptu

Nativní objekty ladicího programu v rozšířeních JavaScriptu – podrobnosti o objektu ladicího programu

Skriptování ladicího programu JavaScriptu

Ukázkové skripty ladicího programu JavaScriptu