SuperAPI AI 工具集

clr-activation-debugging

测试与质量

查看项目

更新于 10-16 06:45

技能介绍

用途:诊断 .NET Framework 的 CLR 激活问题。CLRLoad 日志由 shim(mscoree.dll,实际实现在 mscoreei.dll)生成,记录 shim 选择并加载 CLR 版本时的每一步决策,用于定位运行时加载与选择故障。

主要能力:分析激活日志入口点(_CorExeMain、DllGetClassObject、ClrCreateInstance、CorBindToRuntimeEx、GetRequestedRuntime、LoadLibraryShim)、版本解析结果(Decided on runtime、Default version、FindLatestVersion)、配置文件解析(supportedRuntime、useLegacyV2RuntimeActivationPolicy)、失败与 FOD 路径(ERROR、SEM_FAILCRITICALERRORS、Launching/Could have launched feature-on-demand),并识别同一进程中的多次激活序列及嵌套日志。附带参考文件 log-format.md、activation-flow.md、com-activation.md。

使用方式:需先启用日志。环境变量方式:set COMPLUS_CLRLoadLogDir=C:\CLRLoadLogs;注册表方式:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework 下 CLRLoadLogDir(REG_SZ),64 位系统涉及 32 位进程还需设 Wow6432Node。日志目录必须已存在,shim 不会创建;日志格式为 {ProcessName}.CLRLoad{NN}.log,进程退出前无法读取;采集后移除环境变量或注册表项。分析时先按进程名归类扫描结果行,再逐条追踪问题日志,必要时检查 CLSID 注册与已安装运行时。

适用场景:进程无法加载 CLR、选错 CLR 版本、FOD 弹窗意外出现或该出现却未出现、v2 与 v4 同进程加载导致失败、COM 对象激活失败、旧式宿主 API 绑定到意外版本;出现 0x80131700 等 shim HRESULT 时也适用。

限制:仅覆盖 .NET Framework,不适用于现代 .NET(CoreCLR/.NET 5+);程序集绑定失败应使用 Fusion 日志(fuslogvw.exe);CLR 加载后的崩溃不属于激活问题。注意 .NET 3.5(CLR v2.0.50727)在近期 Windows 预览版中不再作为可选组件提供,需独立 MSI 安装。