文章編號: 183480 - 上次校閱: 2003年10月15日 - 版次: 1.0

HOWTO:在 IIS 4.0 和 IIS 5.0 下偵錯 ISAPI DLL

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
本文曾發行於 CHT183480
全部展開 | 全部摺疊

結論

在 Internet Information Server (IIS) 4.0 下偵錯 ISAPI 擴充程式和篩選器,已經在 Microsoft Developer Network (MSDN) 文件中完全說明。您可在下列位置找到這份文件:
   Platform SDK
      Web Services
         Internet Information Services SDK
            Programmer's Guide
               Developing ISAPI Extension and Filters
                  Debugging ISAPI Extensions and Filters
請注意,這份文件並未隨 NTOP 的預設安裝選項而安裝,也未藉由新增 IIS 5.0 至 Windows 2000 而安裝。不過,您可在下列連結找到此文件:
MSDN Online (http://msdn.microsoft.com/library)

其他相關資訊

下面是偵錯 ISAPI 擴充程式或 篩選器 DLL 的方法執行步驟 (假設在 IIS 電腦上已安裝 Visual C++)。
  1. 建立 ISAPI DLL 的偵錯版本。專案的 Debug 子目錄預設將包含 *.dll 和兩個 *.pdb 副檔名的檔案 (例如 c:\MyProj\debug 目錄)。
  2. 在 IIS Management Console 建立具有 Execute 權限的虛擬根目錄,並將實體位置設定至專案的偵錯目錄 (例如,/MyProj 虛擬根目錄將對應至 c:\MyProj\Debug)。
  3. 確定正在執行 W3SVC 服務。並要時請將它啟動 (您可以使用這個命令:net start w3svc)。
  4. 啟動 Microsoft Developer Studio。移至 [Build] 功能表,按一下 [Start Debug] ,然後再按 [Attach Process] 。選取 [Show System Processes] 選項。在 Windows 2000 中,有時候在處理序清單中不會顯示任何處理序 (請參閱 235434 FIX: "Attach to Process" List Is Empty? (http://support.microsoft.com/kb/235434/EN-US/ ) )。您可以以滑鼠右鍵按一下 [Task Manager processes] 索引標籤中的特定處理序,然後選擇 [debug] 以附加偵錯程式至該處理序。
  5. 在執行中處理序清單中,選取 [INETINFO]
  6. [Project] 功能表中,按一下 [Settings] 。按一下 [Debug] 標籤。從 [Category] 下拉式清單方塊中,選取 [Additional DLLs] 。此時您應該看到說明已經載入 DLL 符號的訊息。
  7. 新增 ISAPI 擴充程式或篩選器 DLL 至清單。
  8. [File] 功能表中,按一下 [Open] ,以顯示 DLL 的原始檔。在原始程式碼中設定中斷點,並從瀏覽器向 IIS 提出請求 (例如 http://server/myproj/mydll.dll)。如果偵錯程式發出嗶聲並拒絕設定中斷點,其原因可能是 DLL 與 PDB 檔案之間不相符。重新建立 DLL 應該有助於解決這種狀況。
注意 1 :如果應用程式設定為在 IIS 4.0 中跨處理序執行 (或在 IIS 5.0 具有中等或高級應用程式保護),則附加偵錯程式至 Inetinfo.exe 不會中斷執行擴充程式 DLL。您必須附加偵錯程式至 MTX.exe 處理序 (或 Windows 2000 的 DLLHOST.exe),此處理序主控 ISAPI DLL。因為可能同時有多個 MTX.exe (DLLHOST.exe) 處理序正在執行,您必須新增可顯示載入的 DLL 的處理序 ID (PID) 的程式碼至 ISAPI DLL。在知道 PID 之後,就可以附加偵錯程式至相對應 PID 的 MTX (DLLHOST)。您可以使用下列程式碼:
 #define _WIN32_WINNT 0x0400

 #ifdef _DEBUG
 char szMessage [256];
 wsprintf (szMessage, "Please attach a debbuger to the process 0x%X (%s) and click OK",
           GetCurrentProcessId(), argv[0]);
 MessageBox(NULL, szMessage, "ISAPI/Filter Debug Time!",
                  MB_OK|MB_SERVICE_NOTIFICATION);
 #endif

同時,請注意中等應用程式保護是 IIS 5.0 的預設設定。

注意 2 :基於偵錯目的,可能也會設定 IIS 5.0 應用程式在低應用程式保護下執行。如此可允許直接附加偵錯程式至 inetinfo.exe 處理序。

?考

Windows NT 4.0 Options Pack 線上文件
MSDN 線上文件

本文件是根據 Microsoft Knowledge Base 文件編號 Q183480 翻譯的。若要參考原始英文文件內容,請至以下網址:

http://support.microsoft.com/support/kb/articles/Q183/4/80.asp (http://support.microsoft.com/kb/183480/en-us?ln=en-us&sd=gn&fr=0)

這篇文章中的資訊適用於:
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Information Services 5.0
關鍵字:?
kbhowto kbiis500 kbiis400 kbdebug kbdsi kbasp KB183480
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。