2012-01-03 149 views
0

我在2003年使用IIS 6.我创建了一个继承自IHttpAsyncHandler的HTTP处理程序dll。该DLL建立到inetpub \ www8080root \ common \ bin目录中。它意味着拦截所有请求。调试HTTP处理程序

该网站设置为监视端口8080.我已经在www8080root目录中创建了一个公用文件夹,并在II6中创建了一个虚拟目录指向它。 我创建公共目录中

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
<system.web> 
    <compilation debug="true" defaultLanguage="c#" /> 
    <httpHandlers> 
     <add verb="*" path="*" 
      type="x2Handler.x2Handler, x2Handler" /> 
    </httpHandlers> 
</system.web> 
</configuration> 

web.config文件当我访问http://localhost:8080/common/index.html的HTTP处理程序引起的w3wp.exe崩溃,当我看到在事件日志中我可以看到处理器中的错误造成了这次事故。当我在VS 2005中设置一个断点时,它不会受到影响。

为了进行调试,我需要以某种方式附加到在IIS下运行的进程,但一旦它处理请求,它就会崩溃。

如何在IIS下调试HTTP Handler DLL?我看不到一个aspnet_wp.exe进程附加到如下所述:C#, Debugging an HTTPHandler

编辑: 通过添加Debugger.Break()我现在收到消息“的w3wp.exe引发断点”,它可以让我选择一个调试环境,但它没有加载符号

No symbols are loaded for any call stack frame. The source code cannot be displayed. 

我设置工具 - >选项 - > Debugging->启用仅我的代码 我将路径设置为通用/ bin中的位置,从加载的符号。任何手动设置断点仍然显示:

The breakpoint will not currently be hit. No symbols have been loaded for this document. 

编辑: 当它加载它似乎是在寻找ntdll.pdb的符号。即使我手动加载httpHandler的符号文件也没有区别。
虽然代码肯定执行。

+1

它所指的符号是一个符号数据库,它是在Visual Studio的“调试”配置中构建应用程序时创建的。文件扩展名是.pdb,确保调试器可用。 – jlafay 2012-01-03 22:17:05

回答

1

问题是.Net已经安装在版本IIS之前。我注意到“编辑配置”按钮被禁用,发现这个网站http://www.warfiblog.com/edit-configuration-disabled。 继说明:

You will need to go to Start -> Microsoft Visual Studio 2005 -> Visual Studio Tools -> Visual Studio 2005 Command Prompt. On the prompt write down this command: 
aspnet_regiis -r 
The above command will register dot net with IIS and now the button will also be enabled. 

在此过程中,它固定在调试问题!

2

在发生异常之前添加Debugger.Break()几行。这应该给你一个弹出窗口要求附加一个调试器。

+0

感谢您的帮助。它按你说的那样做,但我仍然无法调试。 – 2012-01-03 22:13:38

+0

查看我的编辑更多细节 – 2012-01-05 01:16:04