2

我正在尝试使用 Visual Studio 2010 中的功能,该功能允许用户附加到正在运行的进程以进行调试。我正在附加到 w3wp.exe 进程。这是我的问题:如果我附加到 DefaultAppPool,我的断点不能被命中(“断点当前不会被命中。没有为此文档加载任何符号”)。但是,如果我使用 Classic .NET App Pool 进行连接,那么我的断点就可以工作(至少,他们做了一个)。

我的问题是 Classic .NET App Pool 并不总是作为“附加到进程”对话框中的选项列出。我已经通过转到我机器上的 IIS (7) 并检查应用程序池来验证两个应用程序池都在运行。我还尝试将“附加到:”设置从“托管(v4.0)代码”更改为“托管(v2.0、v1.1、v1.0)代码”。它似乎没有什么区别(每次更改后我都会刷新列表)。

谁能解释为什么经典应用程序池有时但并非总是出现在“附加到进程”列表中?

这一切都是因为我一直无法让应用程序在 Visual Studio 中正常调试。(请参阅此线程)我工作了几天试图解决“没有加载符号”错误。但是,我注意到当我的同事在他的机器上调试应用程序时(它适用于他),他在调试 >> Windows >> 模块中有很多“无法找到或打开 PDB 文件”错误,但是他的断点仍然有效。所以,我认为这不是问题。

一注。我的同事在使用 IIS 7 时使用的是 IIS 6。我认为这就是类应用程序池为我短暂工作的原因。现在,如果我能以某种方式再次附加到它...

4

2 回答 2

3

使用输出调试 PDB 的配置文件构建项目,并确保在您的 web.config 中通过<compilation debug="true">.

无论应用程序池的名称如何,您需要附加到的应用程序池是您的应用程序在其下运行的任何应用程序池。

于 2013-07-02T20:19:06.173 回答
2

一些提示:

1) 确保在“构建”选项卡上的项目属性中,“优化代码”复选框已关闭。确保 pdb 在您尝试调试的程序集旁边。

2) 在寻找正确的工作进程时,您可以运行 appcmd list wp(以管理员身份)来获取正确的进程 ID。

3)确保远程调试器正在运行(具有适当的位数)。

4) 检查模块窗口并确保您尝试调试的程序集已加载。如果没有加载它(右键单击)。

在尝试了所有这些善意的建议之后。

于 2013-07-02T20:21:58.297 回答