最近有需要要调试一个ISAPI DLL,在网上查了点资料如:
how to debug ISAPI DLLs in IIS 4.0, IIS 5.0, IIS 5.1, and IIS 6.0How to debug ISAPI DLLs in IIS 4.0, IIS 5.0, IIS 5.1, and IIS 6.0) 地址在:
http://support.microsoft.com/kb/183480/EN-US/#3但按照文章的步骤设置后仍然不对,于是自己按照想法进行了设置,思路很简单,就是DLL是依存在IIS的那个进程中运行?然后对进程进行调试.那么首先要知道DLL依存的进程,下表显示了关于最近IIS版本的进程模型.
IIS5.0
平台体系结构:Windows 2000
应用程序进程模型:TCP/IP 内核
DLLhost.exe(处于中等或高应用程序隔离模式下的多个 DLL 主机)
IIS5.1
平台体系结构:Windows XP Professional
应用程序进程模型:TCP/IP 内核
DLLhost.exe(处于中等或高应用程序隔离模式下的多个 DLL 主机)
IIS6.0
平台体系结构:Windows Server 2003 家族
应用程序进程模型:HTTP.sys 内核
当 IIS 以 IIS 5.0 隔离模式运行时:Inetinfo.exe(对于进程内应用程序)或 DLLhost.exe(对于进程外应用程序)当 IIS 以工作进程隔离模式运行时:W3wp.exe(多工作进程)
(摘自IIS帮助文档,对IIS内核感兴趣的朋友可以继续深入研究一下哟.只是记得把成果共享一下呀.)
根据上表IIS6.0可以运行于两种模式下,那么如何知道到底现在运行的是那种模式呢?很简单打开IIS管理器看一眼如果存在“应用程序池”文件夹,则为工作进程隔离模式;如果不存在“应用程序池”文件夹,则为 IIS 5.0 隔离模式。
根据我的IIS管理器里有"应用程序池"文件夹,得到我的IIS运行于工作进程隔离模式,推出ISAPI DLL依附于W3WP.EXE进程.
好了,现在来试一次,(确定IIS已经启动了,以管理员角色登录,)
一:创建虚拟目录
二:在虚拟目录中用VS2003创建一个扩展ISAPI DLL(MFC)项目
三:生成该项目.
四:在Default(CHttpServerContext* pCtxt)函数第一行设个断点.
五:在点击调试菜单->进程,在进程窗口中点击显示系统进程找到我们的W3WP.EXE点击附加.在弹出的附加到进程的对话窗中选择Native单击确定,关闭进程窗口,好了调试环境以创建好,就等你触发了.
六:打开IE浏览器,浏览你的ISAPI DLL,如:HTTP://LocalHost/MyWeb/MyIsapi/debug/MyIsapi.dll 回车,是不是停在了VS2003代码中的断点处了哟(连IIS服务的停止启动都不需要).然后就开始调吧. GOOD LUCK!
其它的环境我没试过, 不过我想根据以上思路应该也可以吧.