加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

调试 – 如何使用ILspy调试一个DLL?

发布时间:2020-12-14 02:56:01 所属栏目:Windows 来源:网络整理
导读:我想使用ILspy调试一个dll,如图: 但它只能显示两个过程: 但在vs2010中,我可以附加更多进程: 如何在ILspy中显示w3wp.exe?谁能帮我? 解决方法 来自ILSpy源代码(ICSharpCode.ILSpy.Debugger.UI.AttachToProcessWindow): Process currentProcess = Process
我想使用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中显示得很好而你的没有.也许你的环境有一些不同的东西会混淆上述算法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读