Windbg和查看AppDomain内容

时间:2011-11-15 06:02:11

标签: c# windbg appdomain linqpad

我知道我们可以在winbbg中使用!dumpdomain命令来查看给定托管进程中存在的各种app域(例如w3wp)。

我在LinqPad中编写了一个小程序(来自Visual C#2010 Recipes A问题解决方案方法的配方3-1)来创建自定义AppDomain。这是我面临问题的地方。我无法使用windbg查看此appdomain。换句话说,这个应用程序域在哪里创建?它是否在LinqPad进程内托管?如果没有,那么哪个进程正在托管此自定义应用程序域?

我尝试将LinqPad.exe附加到windbg并发出!dumpdomain命令但是我收到以下错误:

  

无法找到运行时DLL(clr.dll),0x80004005扩展命令   需要clr.dll以便有事可做。

代码:

void Main()
{
    AppDomainSetup setUpInfo = new AppDomainSetup();

    setUpInfo.ApplicationBase = @"C:\MyRootDirectory";
    setUpInfo.ConfigurationFile = "MyApp.config";
    setUpInfo.PrivateBinPath = "bin;plugins;external";

    AppDomain newDomain = AppDomain.CreateDomain("My New Domain",null,setUpInfo);

    Console.WriteLine("Main method complete.Press Enter");
    Console.ReadLine();
}

遵循的步骤:

  • 运行程序。它等待用户按Enter键。
  • 启动windbg。附上LinqPad.exe。
  • issue命令:.load sos.dll和.load sosex.dll
  • 发出命令.reload
  • 最后调用!dumpdomain。此时LinqPad冻结了。如果我关闭windbg,那么LinqPad也会关闭。

1 个答案:

答案 0 :(得分:1)

它是在LINQPad进程中创建的。您的查询本身在LINQPad创建的单独AppDomain中运行。错误消息是否与CLR版本不匹配有关?你在运行LINQPad 2.x还是4.x?