テクニカル ノート 63: インターネット拡張 Dll のデバッグ

インターネット サーバー拡張 DLL を書かれている場合は、拡張が呼び出された後その実行、ブレークポイントの設定、またはモニターの変数の値をトレースすることができますので、デバッガーで実行を得ることに興味があります。Microsoft インターネット インフォメーション サーバー (IIS) を取得して、デバッガーで DLL を実行しては少しトリッキーです。最初の制御の設定では、DLL をデバッグすることができます静かなサーバーを検索する必要があります。このようなリソースを見つけたら、DLL をデバッグを開始することができます。

バージョン 3.0 と 4.0 IIS の間の違いのため、DLL のデバッグに使用するバージョンを知ることが重要です。

デバッグを使用して Internet Information Server (3.0 とそれ以前)

インターネット サーバー拡張 DLL を IIS 3.0 を使用してデバッグする手順に従います:

  1. IIS 発行サービスは、IIS マネージャーを使用してまたは Windows NT 高度なサーバーのコントロール パネルのサービス アイコン サービスを停止する停止します。World Wide Web 発行サービスの拡張機能をデバッグすることのみですがすべての 3 つのサービスを停止する必要がありますに注意してください。物事を簡単にするのには、あなたの開発の後でこの手順を省略できますので「手動で」コントロール パネルを開始する必要があります。

  2. Microsoft Visual C を起動し、開いているワークスペースを閉じるには、ワークスペースを閉じるコマンド [ファイル] メニューをクリックします。

  3. [ファイル] メニューの [、INETINFO を開くには、ワークスペースを開く] をクリックします。EXE プログラム。このファイルは、Microsoft Internet Information Server をインストール ディレクトリにあります。

  4. [プロジェクト] メニューの [設定] をクリックし、[プロジェクト設定] ダイアログ ボックスの [デバッグ] タブをクリックします。

  5. [カテゴリ] ボックスで選択した一般に、次の [プログラムの引数] ボックスに入力します。:

    -e W3Svc

  6. 追加する Dll カテゴリドロップ ダウン リストから選択します。次に、[ローカル名] ボックスに、完全なパスと名前を拡張 DLL または Dll。 必ずそれぞれの横にチェック ボックスがオンを指定します。

  7. プロジェクト設定ダイアログ ボックスを閉じます[ok]をクリックします。

  8. 確認をします。DLL の PDB ファイルをデバッグする Dll と同じディレクトリにあります。

デバッグのヒント

はるかに容易にデバッグ、対話型のアプリケーションとしては、IIS を実行できます。これを行うにはいくつかの変更をシステムにする必要があります。サーバーを実行しているユーザー アカウントをいくつかの特権を追加する必要があります。

特権を追加するには、ユーザー マネージャーを実行します。(Windows NT 3.51 を使用している場合は、MUSRMGR を実行します。EXE。Windows NT 4.0 を使用している場合は、USRMGR を実行します。EXE。)ユーザー権利ポリシー ] メニューの [から] をクリックします。高度なユーザー権利の表示チェック ボックスを選択します。オペレーティング システムの一部として動作する、右側のドロップダウン リストから選択し、ユーザー アカウントを追加。

このセキュリティ監査の生成のプロセス (もで、右側のドロップダウン リスト) を繰り返します。すべてのインターネット サービス (WWW、ftp、および gopher) が停止していることを確認し、INETINFO。EXE が実行されていない (TLIST を使用して確認する)。ログオフして再度ログオンします。[コマンドラインを IIS を読み込むことができます。:

INetInfo.Exe-e W3Svc

デバッガ (たとえば、WinDbg) の下で IIS をロードするには、次のコマンドラインを使用します。:

WinDbg INetInfo.Exe-e W3Svc

あなたは行く用意ができています。Visual C では、デバッグを [ビルド] メニューをポイントし、[移動] をクリックします。このアクション、WWW 発行サービスを開始し、デバッガーは DLL 内のシンボルの認識されます。ファイルにデバッグ情報がないと、警告を無視することができます。

Visual C を閉じると、INETINFO のワークスペースを保存します。EXE。その方法は、デバッグ セッションの設定を再入力を回避できます。ちょうど、INETINFO を開きます。デバッガーを再び開始する準備ができたらの MDS ワークスペース ファイル。

キャッシュされた Dll

HKEY_LOCAL_MACHINE/システム/CurrentControlSet/サービス/W3SVC/パラメーター/彼らが使用されるたびに Dll の再初期化、サーバーに CacheExtensions レジストリ設定を調整できます。この設定が 1 の場合は、サーバーは可能な限りのメモリに読み込まれる Dll を維持します。以来、ピーク パフォーマンスを達成するため、サーバーことができます、デバッグ用のサーバーを使用している場合にのみ変更する必要がありますこれは、サーバーの既定の設定です。設定をする場合 0、サーバーは常に拡張 Dll が読み込ま彼らが使われるたびに。

DLL を再読み込みするようにサーバーを強制は、DLL は、クラッシュまたはそれを保持すべてインスタンス単位のデータを動揺させる可能性があるときに役立ちます。DLL の再初期化するようにサーバーを強制することによって、あなたを DLL に少しの努力で予測可能な状態に取り戻すことができます。通常の CacheExtensions 設定を使用して、DLL、ただし、ことを確認する DLL 内のコードは初期の状態に完全に依存ないをテストすることを確認します。

デバッグを使用して Internet Information Server (またはそれ以降)

IIS 4.0 またはそれ以降を使用して、サーバー コンポーネントとインターネット サーバー拡張 Dll のデバッグ環境を確立するには、数とおりの方法があります。Windows NT プロセスにアタッチできるデバッガーを使用している場合は、コンポーネントまたは拡張機能をデバッグするにはこの機能を使用することができます。Visual C でをデバッグしている場合は、たとえば、次の手順します。:

  1. Iisadmin プロセスを開始します。これは、コマンドライン、コマンドnet start iisadminから行うことができます。Iisadmin が開始されます、IIS Admin サービスを開始するのに [サービス] ダイアログ ボックスからコントロール パネルを使用することもできます。

  2. Visual C を起動します。デバッグの開始]を [ビルド] メニューをポイントし、[プロセスにアタッチ] ボタンをクリックします。

  3. [システム プロセスを表示] チェック ボックスを選択します。

  4. Inetinfo プロセスを一覧から選択し、 [ok]をクリックします。

  5. W3svc サービスを開始します。これは、コマンドnet start w3svcをコマンドラインから行うことができます。World Wide Web 発行サービスを開始するのに [サービス] ダイアログ ボックスでコントロール パネルを使用することもできます。

使用しているデバッガーを Windows NT プロセスにアタッチできない場合は、適切なデバッグ環境を設定するには、次の手順を取る:

  1. コントロール パネルの [サービス] ダイアログ ボックスを開く。

  2. IIS Admin サービスを選択し、[スタートアップ] ボタンをクリックしてください。

  3. サービス デスクトップとの対話を許可]チェック ボックスを選択し、 [ok]をクリックします。

  4. IIS Admin プロセスの下で実行されるすべてのプロセスをたとえば、World Wide Web Publishing Service、FTP Publishing Service 手順 2 と 3 を繰り返します。

  5. レジストリ エディター (REGEDIT) を使用してInetinfo.Exeという名前は、HKEY_LOCAL_MACHINE/ソフトウェア/マイクロソフト/WindowsNT/CurrentVersion/Image File Execution Options キーにサブキーを追加するには。

  6. この新しいキーに次のエントリを追加します。:

    デバッガー lt; = DebuggerExeName > DebuggerExeName、デバッガーへの完全パスは、使用しています。

World Wide Web 発行サービスが開始されると、デバッガも起動します。今、インターネット サーバー拡張 DLL の適切なブレークポイントを設定できます。

コンポーネントはメモリに読み込まれているまで、コンポーネントのソース コードにブレークポイントを設定することができなくなります。これを行うには、Internet Explorer と表示を開始をします。オブジェクトを含む ASP ページ。ページが読み込まれるとすぐに、コンポーネントにブレークポイントを設定することができる必要があります。ページを再度表示するには更新をクリックし、選択したブレークポイントをトリガーします。場合 (例えば、障害コンポーネントのスタートアップ コードで発生する場合)、コンポーネント一度も読み込むことができません、デバッグ セッションを開始する前に、コンポーネント DLL をロードする必要があります。(ステップ 11 の下を参照してください)。

いくつかのケースでは、上記 2 つの手順のいずれかを使用できない場合があります。これらの戦略のいずれかを使用してがある場合は、IIS の以前のリリースに記載されている、3 番目のアプローチです。この 3 番目のアプローチには、Windows NT のセキュリティ特権の確立し同様、レジストリに変更を加える必要があります。それも IIS をサービスとして実行する機能を無効にします。このアプローチは、前の 2 つの方法が失敗した場合にのみ使用します。

  1. ユーザー マネージャーでドメイン管理ツール (USRMGR) を使用してサービスとしてログオンオペレーティング システムの一部として機能、およびセキュリティ監査の生成権限、ローカル コンピューターで、インターネット サーバー拡張 DLL をデバッグするときに使用する Windows NT アカウントを追加するには。

  2. 分散 COM の構成ユーティリティ (DCOMCNFG) を使用して、デバッグに使用するユーザー アカウントに、IIS Admin サービスの id を変更するには。

  3. LocalService キーワードすべての IISADMIN 関連サブキー HKEY_CLASSES_ROOT/AppID の下から削除するのにには、レジストリ エディター (REGEDIT) を使用します。このキーワードは、次のサブキーにあります。:

    F196-11d0-9953-00c04fd919c1 ・ ・ WAMREG の IIS admin サービス

    {9F0BD3A0-EC01-11D0-A6A0-00A0C922E752}//IIS Admin Crypto 拡張機能

    {A9E69610-B80D-11D0-B9B9-00A0C922E750} ・ ・ IISADMIN サービス

    LocalService キーワードは AppID の追加のサブキーにあります。

  4. LocalServer32 サブキーは、レジストリの CLSID ノードに関連するすべての IISADMIN 関連のサブキーを追加します。これは、前の手順で取り外したサブキーのすべてに対応するサブキーが含まれます。これらの新しいキーの lt に既定値を設定、パス > \inetinfo.exe-e w3svc。(<path> 通常「c:\winnt\system32\inetsrv」です。

  5. Microsoft 管理コンソールから、またはコントロール パネルの [サービス ダイアログ ボックスから WWW および FTP サービスを停止します。

  6. Visual C を起動し、プロジェクトの設定] ダイアログ ボックスで [デバッグ] タブを選択。

  7. [デバッグ セッションの実行可能ファイル] フィールドに次のパスを入力します。:

    C:\WINNT\System32\Inetsrv\Inetinfo.exe

  8. [プログラムの引数] フィールドに、次を入力します。:

    -e w3svc

  9. [プロジェクト設定] ダイアログ ボックスの [リンク] タブを選択します。

  10. インターネット サーバー拡張機能、出力ファイル名] フィールドにデバッグする DLL のパスと名前を入力します。

  11. 必要に応じて、コンポーネント DLL は、アプリケーションを開始する前に、読み込まれる追加の Dllのリストに追加します。これは、コンポーネントのスタートアップ コードでのブレークポイントの設定ができるようになります。

  12. デバッグ セッションを開始するには [移動] ボタンをクリックします。

特価;デバッグ セッションを完了した後、以前の設定を復元し、IIS をサービスとして実行するを許可する 1 から 5 の手順をリバースする必要があります。(&N)。

番号順テクニカル ノート|nbsp;カテゴリ別テクニカル ノート(&N)

Index