關于ISAPI調試的文章,網上已經有很多。今天之所以還要寫這篇文章,原因有三:一是網上關于調試
ISAPI的方法大多數都是在Win2K;二是網上的例子雖然多,大部分都是轉載,大部分作者自己從未親自試過,就直接把別人的東西粘貼過來,往往影響了
網上搜索又誤導了其他尋找答案的人;三是網上的例子有些并不詳細,有些也不正確,這樣不但不能幫助解決問題,還容易把人帶入歧途。
今天得了一點空閑,在這里詳細寫下ISAPI在Xp環(huán)境下的調試方法,希望初次接觸到ISAPI的程序員們少一些郁悶。
首先我的操作系統環(huán)境是Microsoft Windows Xp Professional。我的編譯環(huán)境是Virsual C++6.0。VC的補丁主要有SP6。
接下來按照下面的步驟:
1、IIS的目錄(根目錄、虛擬目錄)運行級別改為低(默認為中)
控制面板->管理工具->Internet信息服務。在默認站點上單擊右鍵->屬性->主目錄(標簽)->應用程序保護(N),將中(共用)改為低(IIS進程)。執(zhí)行權限改為“教本和可執(zhí)行文件”。
用同樣的方法修改你新建的虛擬目錄的運行級別。
2、修改本地安全策略屬性
控制面板->管理工具->本地安全策略->本地策略->用戶權利指派。
a、
找到“以操作系統方式操作”,雙擊或者右鍵選屬性,彈出對話框后,點“添加用戶或組”按鈕,在輸入文字區(qū)域中輸入管理員帳戶(又稱中超級用戶),“檢查名
稱”,“確定”添加。比如我現在登陸的帳號是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鍵退出調試狀態(tài)。進
入下一步。如果退出之后繼續(xù)[Build]->[Start Debug]->Attach To
Process,這個時候會提示,該工程不包含任何調試信息。如果能設置斷點,則直接進入第六步。
注:這一步沒有成功,無法attach to process,點了按鈕以后process list還是空的。我是用
msdev -p <process ID>生成的一個VC6環(huán)境,在運行IE后會在異常拋出位置停止。
5、打開你的ISAPI工程中,確定你的編譯狀態(tài)為Debug狀態(tài),確定你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的站點,發(fā)出IE請求,VC應該就會在你設置斷點的地方攔截到這個請求對當前DLL的操作了。
注:正如我在步驟4中講到的那樣,程序在異常位置會停住,可以看到函數的調用順序;再就是有個小trick,可以加個ASSERT在異常附近位置,這樣程序就可以停止在那兒,這樣也就可以使用斷點了。
只有注冊用戶登錄后才能發(fā)表評論。 | ||
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
![]() |
||
相關文章:
|
||
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|
| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
27 | 28 | 29 | 30 | 31 | 1 | 2 | |||
3 | 4 | 5 | 6 | 7 | 8 | 9 | |||
10 | 11 | 12 | 13 | 14 | 15 | 16 | |||
17 | 18 | 19 | 20 | 21 | 22 | 23 | |||
24 | 25 | 26 | 27 | 28 | 29 | 30 | |||
31 | 1 | 2 | 3 | 4 | 5 | 6 |
常用鏈接
留言簿(10)
隨筆分類(307)
- Algorithm(22)
- apache(1)
- Assembly(1)
- browser(2)
- C++_BASIS(39)
- Compiling Theorem(1)
- CPU(1)
- cvs(3)
- Database(8)
- Designed Patterns(3)
- FileFormat(4)
- FileSystem(1)
- freebsd(1)
- Game(2)
- gdb(1)
- Gossips(12)
- GP_STL(3)
- interview(8)
- java
- life and living(1)
- linux kernel(12)
- Linux_Coding(43)
- Linux_Driver
- Linux_SysAdmin(26)
- makefile(3)
- misce(5)
- MultiCore(1)
- Network(14)
- OS(18)
- RegularExpression(1)
- schedule(1)
- SearchEngine(1)
- security(2)
- Shell(25)
- Socket(18)
- storage(2)
- Template(4)
- VC_MFC(4)
- vi(5)
- website(1)
- windows(7)
隨筆檔案(297)
- 2012年10月 (1)
- 2012年9月 (1)
- 2012年7月 (1)
- 2012年6月 (7)
- 2012年5月 (3)
- 2012年4月 (2)
- 2011年9月 (3)
- 2011年8月 (3)
- 2011年6月 (3)
- 2011年5月 (2)
- 2011年3月 (2)
- 2011年1月 (1)
- 2010年12月 (2)
- 2010年11月 (6)
- 2010年10月 (4)
- 2010年9月 (7)
- 2010年8月 (12)
- 2010年7月 (6)
- 2010年6月 (5)
- 2010年5月 (11)
- 2010年4月 (16)
- 2010年3月 (20)
- 2010年2月 (18)
- 2010年1月 (26)
- 2009年12月 (34)
- 2009年11月 (36)
- 2009年10月 (5)
- 2009年9月 (1)
- 2009年7月 (2)
- 2009年6月 (3)
- 2009年5月 (6)
- 2009年4月 (6)
- 2009年3月 (11)
- 2009年2月 (6)
- 2008年11月 (1)
- 2008年10月 (1)
- 2008年9月 (3)
- 2008年8月 (4)
- 2008年7月 (16)
algorithm
- andytan
- algorithm, linux, os, network,etc
- EXACT STRING MATCHING ALGORITHMS
- httperf -- a web perf test tool
- Java多線程
- 編程夜未眠
- 布薩空間
- 結構之法
- 沈一峰 google技術博客
- 小兵的窩
Books_Free_Online
C++
- Bjarne Stroustrup's C++ Style and Technique FAQ
- boyplayee column
- C Plus Plus
- CPP Reference
- LearnC++Website
- Welcome to Bjarne Stroustrup's homepage!
database
Linux
Linux shell
linux socket
misce
- cloudward
- 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的
network
OSS
- Google Android
- Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
- os161 file list
overall
搜索
最新評論

- 1.?re: memcached完全剖析系列教程《轉》
- mark
- --zgpxgame
- 2.?re: 用prctl給線程命名
- 評論內容較長,點擊標題查看
- --none
- 3.?re: 用prctl給線程命名
- 請問大俠: 用top命令的時候可以顯示修改后的線程名么?如何做呢?
- --dhao123@sina.com
- 4.?re: 解決Linux pthread_create內存泄漏問題
-
我試過,每一種方法有的時候不行。
第二種是可以的。
- --朱先生
- 5.?re: 著名程序庫的比較和學習經驗
- 評論內容較長,點擊標題查看
- --buy dissertation
- 6.?re: linux的消息隊列與共享內存編程
- 內容選擇得很好,謝謝
- --朱志超
- 7.?re: 著名程序庫的比較和學習經驗
- 評論內容較長,點擊標題查看
- --LillianHancock
- 8.?re: 解決Linux pthread_create內存泄漏問題[未登錄]
- 不錯,支持一個。
- --jack
- 9.?re: 淺談游戲服務器---功能模塊上來看[未登錄]
- 不錯 好文!! 期待博主繼續(xù)
- --cppexplore
- 10.?re: 全面整理的C++面試題
- 評論內容較長,點擊標題查看
- --chatler
- 11.?re: 微軟面試中簡單的算法題目(轉)
- 評論內容較長,點擊標題查看
- --chatler
- 12.?re: Browsers, processes, cookies and session state
- 每個IE Instance該是不同的進程吧,可以獲取進程ID,在每個instance里建一個名稱包含進程id的目錄名,就可以分目錄存儲了吧。
- --chatler
- 13.?re: Browsers, processes, cookies and session state
-
文章說的很清楚,多謝
我有一個問題:
如何為每個ie instance ie實例的 Persistent cookies cookie 指定不同的存儲目錄? - --domolo
- 14.?re: 從一道面試題看指針與數組的區(qū)別
- 一個字,強!
- --路過
- 15.?re: 一個關于單向鏈表的面試題
- 評論內容較長,點擊標題查看
- --chatler
閱讀排行榜
- 1.?Windows Socket五種I/O模型(8339)
- 2.?最大公約數(Gcd)兩種算法(Euclid && Stein)<轉>(5497)
- 3.?用prctl給線程命名(5056)
- 4.?Linux core dump file詳解 <轉>(4495)
- 5.?算法面試題(3400)
- 6.?64位與32位編程的數據類型區(qū)別(3235)
- 7.?解決Linux pthread_create內存泄漏問題(3126)
- 8.?NUMA與英特爾下一代Xeon處理器學習心得<轉>(2993)
- 9.?c語言抓取網頁數據(2832)
- 10.?CVSNT服務器配置——添加用戶、解決無法登陸(2735)
- 11.? pthread_join函數及l(fā)inux線程(2644)
- 12.?一個基于Event Poll(epoll)的TCP Server Framework,淺析epoll(2574)
-
13.?為 C/C++ 項目構建您自己的內存管理器
(2558) - 14.?memcached完全剖析系列教程《轉》(2505)
- 15.?G++編譯選項(2404)
- 16.?STL容器 erase的使用陷井<轉載>(2193)
- 17.?epoll使用例子(2117)
- 18.?linux的消息隊列與共享內存編程(2069)
- 19.?gdb帶參數調試(2061)
- 20.?The Linux Kernel Module Programming Guide(2012)
- 21.?一個關于單向鏈表的面試題(1909)
- 22.?c中strncmp與memcmp的區(qū)別(1884)
- 23.?優(yōu)化Derby數據庫技巧(1831)
- 24.?一個基于完成端口的TCP Server Framework,淺析IOCP(1758)
- 25.?自己整理的指令(1747)
- 26.?autotools制作Makefile 和configure文件(1632)
- 27.?Google C++ Style Guide(1623)
- 28.?linux系統調用函數(1621)
- 29.?An In-Depth Look into the Win32 Portable Executable File Format(1605)
- 30.? vim大小寫轉換(1582)
- 31.?淺談游戲服務器---功能模塊上來看(1552)
- 32.?教你用c實現http協議(1501)
-
33.?MIPS architecture
(1496) - 34.?Aix下查看占用端口的進程(1480)
- 35.?史上最強bash函數庫(1407)
- 36.?linux trap詳解(1341)
- 37.?ms,google,vmware,nvidia美國總部面試題(1323)
- 38.?多CPU上的原子操作(1316)
- 39.?power函數寫法《轉》(1281)
-
40.?Critical Section
(1253)
評論排行榜
- 1.?著名程序庫的比較和學習經驗(3)
- 2.?解決Linux pthread_create內存泄漏問題(2)
- 3.?用prctl給線程命名(2)
-
4.?Browsers, processes, cookies and session state
(2) - 5.?全面整理的C++面試題(1)
- 6.?linux的消息隊列與共享內存編程(1)
- 7.?一個關于單向鏈表的面試題(1)
- 8.?從一道面試題看指針與數組的區(qū)別 <轉>(1)
- 9.?淺談游戲服務器---功能模塊上來看(1)
- 10.?微軟面試中簡單的算法題目(轉)(1)
- 11.?memcached完全剖析系列教程《轉》(1)
- 12.?死鎖和活鎖 deadlock and livelock(0)
- 13.?IT公司筆試算法題(0)
- 14.?effective c++(0)
-
15.?為 C/C++ 項目構建您自己的內存管理器
(0) -
16.?Comparing Two High-Performance I/O Design Patterns
(0) - 17.?boost 庫 enable_shared_from_this 實現原理分析<轉>(0)
-
18.?Which is asymptotically larger: lg(lg* n) or lg*(lg n)$? <
>(0) - 19.?TCMalloc : Thread-Caching Malloc(0)
- 20.?有抗癌效果的神奇食物(0)
- 21.?ubuntu下編譯內核(0)
- 22.?MySQL索引背后的數據結構及算法原理(0)
- 23.?wget進行整站下載<轉>(0)
- 24.?What are the difference between DDL, DML and DCL commands?<轉載>(0)
- 25.?通過證書方式實現ssh的無密碼登陸<轉>(0)
- 26.?50個有關編程的至理名言<轉>(0)
- 27.?How I explained Design Patterns to my wife《reprint》(0)
- 28.?How to explain OOD to my wife-code project《轉載》(0)
- 29.?ifconf.c《轉載》(0)
- 30.?vim configuration(0)
- 31.?<轉>how to start a kernel thread(0)
- 32.?Linux系統性能指標介紹(0)
- 33.?Linux進程的狀態(tài)和調度(0)
- 34.?關鍵字的作用 auto static register const volatile extern (0)
- 35.?epoll使用例子(0)
- 36.?Windows Socket五種I/O模型(0)
- 37.?TCP的流量控制 (0)
- 38.?Linux下各類TCP網絡服務器的實現源代碼《轉》(0)
- 39.?fopen 文本文件與二進制文件區(qū)別(0)
- 40.?Linux目錄掃描程序(0)