スナップショット デバッガーについて

完了

Web アプリの問題を見つけて対処できることは、継続的かつ不可欠なタスクです。 問題をデバッグするベスト プラクティスは、ステージにライブ環境が反映されるステージング インスタンスまたはデプロイ モデルを作成することです。 これにより、カスタマー エクスペリエンスの邪魔になることなく、デバッグを行うことができます。

これは多くの状況でうまく機能します。 ただし、バグが現れる形は、環境要因に左右されることもあります。 たとえば、2 つ以上のエンティティ間のセキュリティで保護された通信に関連しているバグは、ステージング環境では再現が困難な場合があります。 カスタマー エクスペリエンスの邪魔になることなく、ライブ環境をデバッグする機能を備えていると、開発者が問題を探し出して迅速に解決するのに役立ちます。

スナップショット デバッガーは、このシナリオを念頭に置いて設計されました。 これにより、開発者は、ユーザーのエクスペリエンスをほとんど邪魔することなく、ライブ サービスをデバッグできます。 大規模なデプロイでは、アプリケーションの同じインスタンスを実行するサーバーが多数存在する場合があります。 これらのインスタンス全体にわたってまれに発生する問題は、特定のサーバーにのみ表示される可能性があります。 スナップショット デバッガーは、実行されているサーバーに関係なく、アプリケーションの複数のインスタンスに対して同時に機能するため、このような状況でのデバッグに役立ちます。

スナップショット デバッガーのしくみ

スナップポイント。 スナップショット デバッガーでは、スナップポイントを作成できます。 スナップポイントは、一般的な開発環境のブレークポイントのように機能します。 ただし、ブレークポイントがヒットすると (その名のとおり) コードの実行が停止します。 しかし、スナップポイントではコードの実行は停止しません。 スナップポイントがヒットすると、デバッガーによってその時点でのアプリの状態 (呼び出し履歴、変数、オブジェクトの状態) に関する情報が収集されます。 その後、ログが作成され、ユーザーがそれを検査することができます。 コードの実行は通常どおり続行されるため、エンド ユーザーは影響を受けません。

Visual Studio を使用して特定のスナップショットのデバッグ情報を表示できます。 呼び出し履歴とローカルはすべて検査に使用できます。 この情報は、ラボ環境で再作成するのが困難である可能性がある、現実の状況で現れる問題を明らかにするのに役立ちます。

ログポイント。 コード全体のログ エントリを出力しているとします。 しかし、デバッグ中のある特定の問題に関して、その特定の問題をデバッグするために必要なログ エントリが得られていません。 ログポイントを使用すると、ライブ コードにさらにログ ステートメントを追加できます。 ステートメントは一時的であるため、実行中のコードの一部になることはありません。 ただし、デバッグ プロセスで関連するイベントと情報を追跡するのに役立ちます。

条件: 指定する条件付きステートメントは、スナップポイントとログポイントの両方に適用され、問題の根本原因を特定するのに役立つ可能性のある関心のある要求に関する診断情報のみを確実に取得できます。 たとえば、変数で null 値をチェックする条件を設定できます。 実行時に、変数が null ではない条件をチェックして、コードのセグメントがその特定の条件下でヒットしたかどうかを判定することもできます。 スナップショット デバッガーでその条件を追加すると、デバッガーによってスナップショットまたはログポイントにその条件が適用されます。

スナップポイントとブレークポイントの違い

スナップポイントは、その時点でのコードの状態に関する情報を提供します。 デバッガーとは異なり、コードをステップ実行して、コードの実行が進むにつれて変数情報がどのように変化するかを確認することはできません。 ただし、コード内のさまざまな場所にスナップポイントを配置して、時間の経過に伴い状態が変化するのを確認することができます。

また、スナップショット デバッガーは、運用環境への影響を最小限に抑えるように設計されています。 サーバーのメモリが少ない場合は、スナップショットの収集を控えます。 また、Visual Studio を閉じると、スナップポイントは削除されます。 Visual Studio 監視インスタンスの外部で実行中のアプリケーションには保持されません。

スナップショット デバッガーは、ラボ フォレンジックに対して回復性がある特定のシナリオ向けに設計されています。 アプリケーションに関する問題を検出し、最高の状態で動作し続けるようにする、より大きなツールボックスの中の強力なツールとなり得ます。