代码之家  ›  专栏  ›  技术社区  ›  Brad

调试中加载的随机模块

  •  0
  • Brad  · 技术社区  · 14 年前

    当我在Visual Studio 2010中调试我的vb.net应用程序时,在调试输出中它说了一些我不理解的事情:

    'something.vshost.exe' (Managed (v4.0.30319)): Loaded 'jb3yjswu'
    'something.vshost.exe' (Managed (v4.0.30319)): Loaded 'mdul5h2c'
    

    这些随机模块(或其他什么)是什么被加载的?它们与正在创建的线程相关吗?每次调试时名称都会更改。

    1 回复  |  直到 12 年前
        1
  •  2
  •   Jon Skeet    12 年前

    我建议您在适当的时候将模块和类型从加载的程序集转储到日志文件。然后你可以寻找神秘的组件并找到其中的类型。例如:

    using System;
    using System.Xml.Linq;
    
    public class Test
    {    
        static void Main()
        {
            Console.WriteLine("Before");
            DumpAssemblies();
            DoSomethingWithXml();
            Console.WriteLine("After");
            DumpAssemblies();
        }
    
        static void DoSomethingWithXml()
        {
            new XDocument();
        }
    
        static void DumpAssemblies()
        {
            Console.WriteLine("Assemblies loaded:");
            foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
            {
                Console.WriteLine("  Assembly {0}:", assembly.FullName);
                foreach (var module in assembly.GetModules())
                {
                    Console.WriteLine("    Module {0}:", module.Name);
                    foreach (var type in module.GetTypes())
                    {
                        Console.WriteLine("      {0}", type.FullName);
                    }
                }
            }
        }
    }
    

    一旦您知道哪些类型是在哪个程序集中,就应该解释发生了什么。如果您看到的神秘模块没有任何类型,或者没有太多意义的类型,那么您需要添加更多的诊断——例如,在模块中列出资源,或者在类型中列出方法等。