如何调试 ASP 服务器端组件
工作环境:winxp + sp2,VC6.0,IIS5.0
1、写一个调用 com 的 ASP;
2、在 ASP 文件中加上<% Response.Expires = 0 %>使得 ASP 不会被 cache;
3、假定把 asp 放在 Default Web Site (如 c:/Inetpub/wwwroot/)下,在IIS 中选择“默认网站”的属性,在“主目录”标签上,“应用程序保护”右边的 combobox 选“高(独立)”使得 com 运行在独立的进程中,单击“卸载”按钮让 IIS unload 你的 com (If unload button is disabled,you need not click it);
4、把 com 的 action project configuration 设为 Win32 Debug,并且Build;
5、用IE浏览该 asp,例如:http://127.0.0.1/testasp.asp;
6、VC 的 tool->options,在debug tab,enable Just-in-time debugging(checkbox);
7、打开 windows task manager,在 Processes tab 可以看到多个 dllhost.exe。因为你已经
浏览了该 asp,其中一个 dllhost.exe 就是你的 com 的 host。找到这个 host 可以用下面的方法(MSDN有正统方法介绍,但我没有用成功):在你的 com 中加入一些需要大量计算的代码(ASP会调用到的那个 method 中),如
?? int x,y;
?? x=1;
?? y=2;
?? for(int i=0 ;i<10000;i++)
?? {
?????? x=x*y*y;
?? }
然后多按几次 IE 的 refresh,看看哪个 dllhost.exe 使用了 CPU,就是你要找的(其实更简单的方法是查看启动 dllhost.exe 进程的用户名,一般来说 IWAM_* 用户创建的 dllhost.exe 进程就是你要找的 Added by 最后疯狂)。
8、在 windows task manager 选中这个 dllhost.exe,右健选择 debug,会有一个VC6.0程序打开并且 attach 到这个 dllhost.exe 进程,在这个VC的Project->Setting->Debug tab->Category combox,选择 Additional DLLs,在下面的 local name list 中加入你的 com,如 c:/myproject/testcom/debug/testcom.dll (VC 的 debug 可以 attach to process,但在win2000下不行,如果能够用 vc attach 到 dllhost.exe,也可以直接attach);
9、在这个 vc 中打开你想设断点的 com 的源文件,如 c:/myproject/testcom/testcom.cpp,在这个文件中设断点;
10、refresh你的IE,你的断点会生效了!