如何使用ILspy调试一个DLL?

时间:2012-04-17 04:10:25

标签: debugging process ilspy

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

enter image description here

但它只能显示两个过程:

enter image description here

但是在vs2010中,我可以添加更多进程: enter image description here

如何在ILspy中显示w3wp.exe?谁可以帮助我?

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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中表现良好,而你的不是。也许你的环境有些不同之处会与上述算法混淆。

答案 2 :(得分:3)

32位与64位也可能起到一定的作用