崩溃和挂起转储

这些功能需要安装其他 NuGet 包,如每个部分所述。

小窍门

使用 Microsoft.Testing.Platform.MSBuild (由 MSTest、NUnit 和 xUnit 运行程序以可传递方式包含)时,这些扩展会在安装其 NuGet 包时自动注册,无需更改代码。 只有在通过设置 <GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>禁用自动生成的入口点时,才需要本文中指定的手动注册。

故障转储

此扩展允许在进程崩溃时创建崩溃转储文件。 此扩展需要 Microsoft.Testing.Extensions.CrashDump NuGet 包。

手动注册

var builder = await TestApplication.CreateBuilderAsync(args);
builder.TestHostControllers.AddCrashDumpProvider();

选项

Option Description
--crashdump 在测试主机进程崩溃时生成转储文件。 .NET 6.0+ 中支持。
--crashdump-filename 指定转储文件的文件名。
--crashdump-type 指定转储文件的类型。 有效值为 MiniHeapTriageFull。 默认值为 Full. 有关详细信息,请参阅小型转储的类型
--crash-report [仅限 Linux/macOS]在测试进程崩溃时生成 JSON 崩溃报告。 与 --crashdump 结合使用,以同时生成转储文件。 单独使用时需要 .NET 7+,与 --crashdump 结合使用时需要 .NET 6+。 不支持Windows,因为.NET运行时忽略 Windows 上的基础 DOTNET_EnableCrashReportDOTNET_EnableCrashReportOnly 环境变量(dotnet/runtime#80191)。 从版本 2.3.0 开始,MTP 中可用。
--crash-report-if-supported --crash-report 相同,但在不支持生成崩溃报告的平台上会被忽略,并显示一条提示信息。 使用此选项可在包含Windows的 CI 矩阵之间保留相同的命令行。 与 --crash-report 互斥。 从版本 2.3.0 开始,MTP 中可用。
--crash-sequence 控制是否生成一个序列文件,用于列出在测试会话期间开始和结束的测试,并与故障转储或崩溃报告一同生成。 通过该文件,无需检查转储文件,即可确定发生崩溃时正在运行的测试。 有效值为 on (默认值;也接受 trueenable接受) 1off (也接受 falsedisable0)。 从版本 2.3.0 开始,MTP 中可用。

注意

该扩展与 .NET Framework 不兼容,将被无提示忽略。 对于 .NET Framework 支持,可以使用 Sysinternals ProcDump 启用事后调试。 有关详细信息,请参阅 “启用事后调试:Window Sysinternals ProcDump”。 事后调试解决方案还将收集.NET的进程崩溃信息,以便在面向.NET和 .NET Framework 测试应用程序时避免使用扩展。

挂起转储

使用此扩展可以在给定的超时后创建转储文件。 此扩展需要 Microsoft.Testing.Extensions.HangDump NuGet 包。

手动注册

var builder = await TestApplication.CreateBuilderAsync(args);
builder.TestHostControllers.AddHangDumpProvider();

选项

Option Description
--hangdump 在测试主机进程挂起的情况下生成转储文件。
--hangdump-filename 指定转储文件的文件名。 支持以下占位符: {pname} (测试应用程序名称)、 {pid} (进程 ID)、 {asm} (条目程序集名称)、 {tfm} (目标框架名字对象)和 {time} (时间戳)。 旧 %p 令牌(进程 ID)也支持向后兼容性。
--hangdump-timeout 指定生成转储前的不活动持续时间。 超时值是采用以下格式之一指定的:
1.5h1.5hour1.5hours
90m90min90minute90minutes
5400s5400sec5400second5400seconds
500ms500mil500millisecond500milliseconds
1d1day. 1days 空数(无后缀)解释为毫秒。 默认值为 30m (30 分钟)。
--hangdump-type 指定转储文件的类型。 有效值为 MiniHeapFullTriage(在 .NET Framework 上不可用)和 None。 默认值为 Full. 有关详细信息,请参阅小型转储的类型。 该值 None 在 MTP 中可用,从版本 2.1.0 开始。
--hangdump-type-if-supported --hangdump-type 相同,但当所请求的类型在当前运行时不可用时,会显示一条提示性消息,并回退到最接近的受支持转储类型。 例如,Triage仅在 .NET (Core) 上受支持,回退到 .NET Framework 上的 Mini。 使用此选项可在混合 .NET(Core)和 .NET Framework 的 CI 矩阵之间保留相同的命令行。 有效值为 MiniHeapFullTriageNone。 与 --hangdump-type 互斥。 从版本 2.3.0 开始,MTP 中可用。