【发布时间】:2012-04-28 10:06:16
【问题描述】:
我想用 ILspy 调试一个 dll,如图:
但它只能显示两个进程:
但在 vs2010 中,我可以附加更多进程:
如何在 ILspy 中显示 w3wp.exe?谁能帮帮我?
【问题讨论】:
-
w3wp 有什么运气吗?和调试?
-
这是什么版本?我在 2.4.0.1963 中没有看到调试菜单
我想用 ILspy 调试一个 dll,如图:
但它只能显示两个进程:
但在 vs2010 中,我可以附加更多进程:
如何在 ILspy 中显示 w3wp.exe?谁能帮帮我?
【问题讨论】:
来自 ILSpy 源代码 (ICSharpCode.ILSpy.Debugger.UI.AttachToProcessWindow):
Process currentProcess = Process.GetCurrentProcess();
foreach (Process process in Process.GetProcesses()) {
try {
if (process.HasExited) continue;
// Prevent attaching to our own process.
if (currentProcess.Id != process.Id) {
bool managed = false;
try {
var modules = process.Modules.Cast<ProcessModule>().Where(
m => m.ModuleName.StartsWith("mscor", StringComparison.OrdinalIgnoreCase));
managed = modules.Count() > 0;
} catch { }
if (managed) {
list.Add(new RunningProcess {
ProcessId = process.Id,
ProcessName = Path.GetFileName(process.MainModule.FileName),
FileName = process.MainModule.FileName,
WindowTitle = process.MainWindowTitle,
Managed = "Managed",
Process = process
});
}
}
} catch (Win32Exception) {
// Do nothing.
}
}
看起来比较直接……
它是预览软件,因此在确定进程是否使用托管代码的算法中可能存在缺陷。
你也许可以通过下载源代码和更改来解决这个问题
bool managed = false;
到
bool managed = true;
然后重新编译。
我没有安装完整版的 IIS7,所以我无法尝试重新创建您的问题,但我怀疑我是否会遇到同样的问题,因为我的 Visual Studio 开发服务器在 ILSpy 中显示良好,而您的却没有.也许您的环境与上述算法有一些不同之处。
【讨论】:
32 位与 64 位也可能发挥一些作用
【讨论】:
以管理员身份运行 ILSpy 为我解决了这个问题。
【讨论】: