2012-04-17 115 views
5

我想使用ILspy調試一個DLL,如PIC:如何使用ILspy調試一個dll?

enter image description here

,但它只能顯示兩個過程:

enter image description here

但在VS2010,我可以將更多的過程: enter image description here

如何在ILspy中顯示w3wp.exe?誰能幫我?

+0

w3wp附帶任何運氣?和調試? – Konstantin 2012-10-08 19:17:03

+2

這是什麼版本?我在2.4.0.1963中看不到調試菜單 – 2016-06-23 21:04:30

回答

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中顯示正常,而您的不。也許你的環境有些不同之處,與上面的算法混淆。

3

32位和64位的可能也發揮一些作用

5

運行ILSpy作爲管理員解決了這個問題對我來說。