如何使用ILspy调试一个dll?(how to use ILspy debug a dll?)

2019-07-29 00:11发布

我想用ILspy调试一个DLL,如PIC:

但它只能显示两个过程:

但在VS2010,我可以将更多的过程:

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

Answer 1:

从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,而你没有。 也许有你的环境不同的东西,与上面的算法搅乱。



Answer 2:

运行ILSpy作为管理员解决了这个问题对我来说。



Answer 3:

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



文章来源: how to use ILspy debug a dll?