在调试中加载随机模块

时间:2010-09-23 02:33:45

标签: .net visual-studio-2010

当我在Visual Studio 2010中调试我的VB.NET应用程序时,在调试输出中它说了一些我不明白的事情:

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

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

1 个答案:

答案 0 :(得分:2)

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

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);
                }
            }
        }
    }
}

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