次の方法で共有


JavaScript 拡張機能のネイティブ デバッガー オブジェクト - 設計とテストに関する考慮事項

このトピックでは、JavaScript 拡張機能でネイティブ デバッガー オブジェクトを使用するための設計とテストに関する考慮事項について説明します。

ネイティブ デバッガー オブジェクトは、デバッガー環境のさまざまなコンストラクトと動作を表します。 オブジェクトを JavaScript 拡張機能に渡したり、取得したりして、デバッガーの状態を操作できます。

デバッガー オブジェクトの JavaScript 拡張機能の詳細については、「 JavaScript 拡張機能のネイティブ デバッガー オブジェクト」を参照してください。

JavaScript の操作に関する一般的な情報については、「 JavaScript デバッガー スクリプト」を参照してください。

デバッガー データ モデルの設計に関する考慮事項

設計原則

デバッガー拡張機能に、検出可能、クエリ可能、スクリプト可能な情報を表示するには、次の原則を検討してください。

  • 情報は、必要な場所に近い場所にあります。 たとえば、レジストリ キーに関する情報は、レジストリ キー ハンドルを含むローカル変数の一部として表示する必要があります。
  • 情報は構造化されています。 たとえば、レジストリ キーに関する情報は、キーの種類、キー ACL、キー名、値などの個別のフィールドに表示されます。 つまり、テキストを解析せずに個々のフィールドにアクセスできます。
  • 情報は一貫性があります。 レジストリ キー ハンドルに関する情報は、ファイル ハンドルに関する情報と可能な限り同様の方法で表示されます。

これらの原則をサポートしないこれらのアプローチは避けてください。

  • 単一のフラットな「キッチンシンク」にあなたのアイテムを構造化しないでください。 整理された階層を使用すると、ユーザーは、事前に探しているものを知らなくても情報を見つけやすくなり、発見しやすさをサポートします。
  • 従来の dbgeng 拡張機能は、未加工のテキストの画面を出力しながらモデルに移動するだけで変換しないでください。 これは他の拡張機能では作成できず、LINQ 式ではクエリを実行できません。 代わりに、データを個別のクエリ可能なフィールドに分割します。

名前付けガイドライン

  • フィールドの大文字と小文字は PascalCase にすべきです。 jQuery など、異なるケースで広く知られている名前については、例外が考慮されることがあります。
  • 通常は C++ 識別子で使用されない特殊文字は使用しないでください。 たとえば、"Total Length" (スペースを含む) や "[size]" (角かっこを含む) などの名前は使用しないでください。 この規則により、これらの文字が識別子の一部として許可されていないスクリプト言語の使用が容易になり、コマンド ウィンドウからの使用も容易になります。

組織と階層のガイドライン

  • デバッガー名前空間の最上位レベルを拡張しないでください。 代わりに、情報が最も関連性の高い場所に表示されるように、デバッガーで既存のノードを拡張する必要があります。
  • 概念を複製しないでください。 デバッガーに既に存在する概念に関する追加情報を一覧表示するデータ モデル拡張機能を作成する場合は、新しい情報に置き換えるのではなく、既存の情報を拡張します。 言い換えると、モジュールに関する詳細を表示する拡張機能では、モジュールの新しいリストを作成するのではなく、既存の Module オブジェクトを拡張する必要があります。
  • 空き浮動ユーティリティ コマンドは、 Debugger.Utility 名前空間の一部である必要があります。 また、サブ名前空間も適切に設定する必要があります ( Debugger.Utility.Collections.FromListEntry など)。

下位互換性と重大な変更

発行されたスクリプトは、それに依存する他のスクリプトとの互換性を損なわないはずです。 たとえば、関数がモデルに発行される場合、可能な限り、同じ場所に同じパラメーターを持つままにする必要があります。

外部リソースを使用しない

  • 拡張機能は、外部プロセスを生成してはなりません。 外部プロセスはデバッガーの動作を妨げる可能性があり、さまざまなリモート デバッガー シナリオ (dbgsrv リモート、ntsd リモート、"ntsd -d リモート" など) で誤動作します。
  • 拡張機能では、ユーザー インターフェイスを表示することはできません。 ユーザー インターフェイス要素の表示は、リモート デバッグシナリオでは正しく動作しません。また、コンソールのデバッグ シナリオが壊れる可能性があります。
  • 拡張機能では、文書化されていないメソッドを使用してデバッガー エンジンまたはデバッガー UI を操作することはできません。 これにより、互換性の問題が発生し、異なる UI を持つデバッガー クライアントで正しく動作しません。
  • 拡張機能は、文書化されたデバッガー API を介してのみターゲット情報にアクセスする必要があります。 win32 API を使用してターゲットに関する情報にアクセスしようとすると、多くのリモート シナリオや、セキュリティ境界を越えた一部のローカル デバッグ シナリオでも失敗します。

Dbgeng 固有の機能を使用しない

拡張機能として使用することを目的としたスクリプトは、可能な限り dbgeng 固有の機能 ("クラシック" デバッガー拡張機能の実行など) に依存してはなりません。 スクリプトは、データ モデルをホストするデバッガーの上で使用できる必要があります。

デバッガー拡張機能のテスト

拡張機能は、さまざまなシナリオで動作することが期待されます。 一部の拡張機能はシナリオ (カーネル デバッグ シナリオなど) に固有の場合があります。ほとんどの拡張機能は、すべてのシナリオで動作するか、サポートされているシナリオを示すメタデータを持つ必要があります。

カーネル モード

  • ライブ カーネルのデバッグ
  • カーネル ダンプのデバッグ

ユーザー モード

  • ライブ ユーザー モードのデバッグ
  • ユーザー モード ダンプのデバッグ

さらに、これらのデバッガーの使用シナリオを検討してください

  • マルチプロセス デバッグ
  • マルチセッション デバッグ (ダンプ + 1 つのセッション内のライブ ユーザーなど)

リモート デバッガーの使用

リモート デバッガーの使用シナリオで適切な操作をテストします。

  • dbgsrv remotes
  • ntsd remotes
  • ntsd -d リモート

詳細については、「CDB と NTSD を使用したデバッグとプロセス サーバーのアクティブ化」を参照してください

回帰テスト

デバッガーの新しいバージョンがリリースされると、拡張機能の機能を検証できるテスト自動化の使用を調査します。

こちらも参照ください

JavaScript 拡張機能 でのネイティブ デバッガー オブジェクトの

JavaScript 拡張機能のネイティブ デバッガー オブジェクト - デバッガー オブジェクトの詳細

JavaScript デバッガースクリプト

JavaScript デバッガーのスクリプトの例