You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下崩溃的.NET 7 Avalonia应用托管堆栈跟踪如何获取?

获取.NET 7 Avalonia macOS应用的托管堆栈跟踪

以下是几种实用方法,帮你获取有用的托管堆栈信息:

方法1:启用.NET崩溃转储收集

通过设置环境变量让.NET生成包含托管数据的转储文件:

  • 打开终端,执行以下命令后启动应用:
    export COMPlus_DbgEnableMiniDump=1
    export COMPlus_DbgMiniDumpType=2
    open /Applications/YourAppName.app
    
  • 转储文件会生成在~/Library/Logs/DiagnosticReports/目录,文件名格式类似YourAppName_YYYY-MM-DD_HH-MM-SS.dmp
  • 安装dotnet-dump工具分析转储:
    dotnet tool install --global dotnet-dump
    
  • 运行分析命令并获取堆栈:
    dotnet-dump analyze ~/Library/Logs/DiagnosticReports/YourDumpFile.dmp
    
    在分析交互界面输入clrstack即可输出完整托管堆栈跟踪。

方法2:在应用中添加全局异常日志

直接在代码中捕获未处理异常,将堆栈信息写入本地日志文件:

  • 修改Avalonia应用的入口代码,添加全局异常处理:
    public static AppBuilder BuildAvaloniaApp()
    {
        // 捕获AppDomain未处理异常
        AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
        {
            if (args.ExceptionObject is Exception ex)
            {
                var logPath = Path.Combine(
                    Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
                    "YourApp_UnhandledCrashLog.txt"
                );
                File.WriteAllText(logPath, $"崩溃时间: {DateTime.Now}\n{ex.ToString()}");
            }
        };
    
        // 捕获UI线程Dispatcher未处理异常
        Dispatcher.UIThread.UnhandledException += (sender, args) =>
        {
            var logPath = Path.Combine(
                Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
                "YourApp_DispatcherCrashLog.txt"
            );
            File.WriteAllText(logPath, $"崩溃时间: {DateTime.Now}\n{args.Exception.ToString()}");
            args.Handled = true;
        };
    
        return AppBuilder.Configure<App>()
            .UsePlatformDetect()
            .WithInterFont()
            .LogToTrace();
    }
    
  • 测试人员遇到崩溃后,只需在用户主目录下找到对应的日志文件,即可获取完整托管堆栈。

方法3:用lldb配合SOS插件分析崩溃日志

如果已经有原生崩溃日志,可通过lldb加载SOS插件提取托管信息:

  • 打开终端,加载崩溃日志:
    lldb -c ~/Library/Logs/DiagnosticReports/YourAppCrashReport.crash
    
  • 加载对应.NET 7版本的SOS插件(路径需根据实际安装情况调整):
    .load /usr/local/share/dotnet/shared/Microsoft.NETCore.App/7.0.XX/libsos.dylib
    
  • 执行以下命令获取托管堆栈和异常详情:
    clrstack  # 输出托管堆栈跟踪
    pe         # 查看最近的异常信息
    

内容的提问来源于stack exchange,提问作者jdm555

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:17:21