我正在尝试使用Visual Studio 2010中的功能,该功能允许用户连接到正在运行的进程以进行调试。我附加到w3wp.exe进程。这是我的问题:如果我附加到DefaultAppPool,我的断点不能被命中(“断点当前不会被命中。没有为此文档加载符号”)。但是,如果我使用经典.NET应用程序池连接,那么我的断点可行(至少,他们做了一个)。
我的问题是,经典.NET应用程序池并不总是作为“附加到进程”对话框中的选项列出。我已经通过转到我的计算机上的IIS(7)并检查应用程序池来验证两个应用程序池都在运行。我还尝试将“附加到:”设置从“托管(v4.0)代码”更改为“托管(v2.0,v1.1,v1.0)代码”。它似乎没有什么区别(我在每次更改后刷新列表)。
有人可以解释为什么经典应用程序池有时会出现在“附加到进程”列表中,但并非总是如此?
所有这一切都是因为我从来没有能够在Visual Studio中使应用程序正常调试。 (see this thread)我工作了几天试图绕过“没有符号已加载”的错误。但是,我注意到当我的同事正在他的机器上调试应用程序(它适用于他)时,他在Debug>>中有很多“无法找到或打开PDB文件”错误。 Windows>>模块,但他的断点仍然有效。所以,我认为这不是问题。
一个注意事项。当我使用IIS 7时,我的同事正在使用IIS 6.我认为这就是为什么类应用程序池对我来说很简单。现在如果我能以某种方式再次附加它......
答案 0 :(得分:3)
使用输出调试PDB的配置文件构建项目,并确保通过<compilation debug="true">
在web.config中启用调试。
您需要附加的应用程序池是运行应用程序的任何应用程序池,无论应用程序池的名称是什么。
答案 1 :(得分:2)
一些提示:
1)确保在Build选项卡上的项目属性中,关闭“优化代码”复选框。确保pdbs与您尝试调试的程序集并列。
2)在查找正确的工作进程时,您可以运行appcmd list wp(作为管理员)以获取正确的进程ID。
3)确保远程调试器正在运行(具有适当的位数)。
4)检查模块窗口,确保加载了您要调试的程序集。如果没有加载它(右键单击)。
在尝试了所有善意的建议之后。