我知道我们可以在 winbbg 中使用 !dumpdomain 命令来查看给定托管进程(例如 w3wp)中存在的各种应用程序域。
我在 LinqPad 中编写了一个小程序(来自 Visual C# 2010 Recipes 的 Recipe 3-1 A problem solution approach),以创建自定义 AppDomain。这就是我面临的问题。我无法使用 windbg 查看此应用程序域。换句话说,这个应用域是在哪里创建的?它托管在 LinqPad 进程中吗?如果不是,那么哪个进程正在托管这个自定义应用程序域?
我尝试将 LinqPad.exe 附加到 windbg 并发出 !dumpdomain 命令,但出现以下错误:
Failed to find runtime DLL (clr.dll), 0x80004005 Extension commands need clr.dll in order to have something to do.
代码:
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。
- 发出命令:.load sos.dll 和 .load sosex.dll
- 发出命令.reload
- 最后调用 !dumpdomain。此时 LinqPad 卡住。如果我关闭 windbg,那么 LinqPad 也会关闭。
最佳答案
它是在 LINQPad 进程中创建的。您的查询本身在 LINQPad 创建的单独 AppDomain 中运行。错误消息是否与 CLR 版本不匹配有关?您运行的是 LINQPad 2.x 还是 4.x?
关于c# - Windbg 和查看 AppDomain 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8132140/