關于ISAPI調試的文章,網上已經有很多。今天之所以還要寫這篇文章,原因有三:一是網上關于調試
ISAPI的方法大多數都是在Win2K;二是網上的例子雖然多,大部分都是轉載,大部分作者自己從未親自試過,就直接把別人的東西粘貼過來,往往影響了
網上搜索又誤導了其他尋找答案的人;三是網上的例子有些并不詳細,有些也不正確,這樣不但不能幫助解決問題,還容易把人帶入歧途。
今天得了一點空閑,在這里詳細寫下ISAPI在Xp環境下的調試方法,希望初次接觸到ISAPI的程序員們少一些郁悶。
首先我的操作系統環境是Microsoft Windows Xp Professional。我的編譯環境是Virsual C++6.0。VC的補丁主要有SP6。
接下來按照下面的步驟:
1、IIS的目錄(根目錄、虛擬目錄)運行級別改為低(默認為中)
控制面板->管理工具->Internet信息服務。在默認站點上單擊右鍵->屬性->主目錄(標簽)->應用程序保護(N),將中(共用)改為低(IIS進程)。執行權限改為“教本和可執行文件”。
用同樣的方法修改你新建的虛擬目錄的運行級別。
2、修改本地安全策略屬性
控制面板->管理工具->本地安全策略->本地策略->用戶權利指派。
a、
找到“以操作系統方式操作”,雙擊或者右鍵選屬性,彈出對話框后,點“添加用戶或組”按鈕,在輸入文字區域中輸入管理員帳戶(又稱中超級用戶),“檢查名
稱”,“確定”添加。比如我現在登陸的帳號是Guyue,“檢查帳號”之后就出現A7B4931A85554A0\Guyue,
A7B4931A85554A0是我的計算機名稱,Guyue是當前登陸帳戶,是除Administrator之外的我的管理員帳戶。“確定”添加。
b、找到“允許計算機和用戶帳戶被信任以便于委托”,照a的方法添加管理員帳戶。
注:這里我沒有加用戶,直接用的管理員用戶。
3、打開VC6.0,不需要打開任何工程。
菜單欄[Build]->[Start Debug]->Attach To Process
勾選“Show System Process”,找到inetinfo,按OK鍵添加到該進程。
在菜單欄[Project]->[Settings]或者直接按快捷鍵Alt+F7。
會
看到一個General和一個Debug標簽,選擇Debug標簽。Category下拉列中有兩個選項,General和Additional
DLLs,選擇Additional DLLs。在Modules中加入你要調試的DLL,勾選Try to locate others
DLLs,按OK確定保存。
4、打開你的ISAPI工程中的一個CPP文件,看能不能設置斷點,如果不能,按shift+F5鍵退出調試狀態。進
入下一步。如果退出之后繼續[Build]->[Start Debug]->Attach To
Process,這個時候會提示,該工程不包含任何調試信息。如果能設置斷點,則直接進入第六步。
注:這一步沒有成功,無法attach to process,點了按鈕以后process list還是空的。我是用
msdev -p <process ID>生成的一個VC6環境,在運行IE后會在異常拋出位置停止。
5、打開你的ISAPI工程中,確定你的編譯狀態為Debug狀態,確定你Link(輸出)的DLL和你在第三步Modules中保存的DLL為同一個文件。Rebuild一下。
6、菜單欄[Build]->[Start Debug]->Attach To Process
勾
選“Show System
Process”,找到inetinfo,按OK鍵附加到inetinfo進程。打開ISAPI工程中的一個CPP文件,最好是程序的入口文件,在程序的
入口處設置斷點,比如我設置的就是CIsapiWtExtension::InitInstance(...)和DWORD
CIsapiWtExtension::HttpExtensionProc(...)程序一旦開始運行,馬上就可以在這里截獲。
注:既然步驟4里看不到process list,斷點設置自然也就不管用了。
7、打開IE,打開你調用該DLL的站點,發出IE請求,VC應該就會在你設置斷點的地方攔截到這個請求對當前DLL的操作了。
注:正如我在步驟4中講到的那樣,程序在異常位置會停住,可以看到函數的調用順序;再就是有個小trick,可以加個ASSERT在異常附近位置,這樣程序就可以停止在那兒,這樣也就可以使用斷點了。
posted on 2008-07-19 18:24
chatler 閱讀(814)
評論(0) 編輯 收藏 引用 所屬分類:
VC_MFC