5

我想使用 ILspy 调试一个 dll,如图:

在此处输入图像描述

但它只能显示两个过程:

在此处输入图像描述

但在 vs2010 中,我可以附加更多进程: 在此处输入图像描述

如何在 ILspy 中显示 w3wp.exe?谁能帮我?

4

3 回答 3

5

以管理员身份运行 ILSpy 为我解决了这个问题。

于 2013-02-20T21:55:04.913 回答
3

从 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 中显示良好,而您的却没有。也许您的环境与上述算法有一些不同之处。

于 2012-04-22T04:21:31.070 回答
3

32 位与 64 位也可能发挥一些作用

于 2012-05-07T19:49:27.843 回答