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

如何获取运行在客户端的Flutter Windows桌面应用的崩溃报告?

Flutter Windows桌面应用崩溃报告获取方案

针对你提出的两个问题,统一给出可落地的实现方案:

1 崩溃捕获实现逻辑

你可以同时捕获Flutter框架层和Windows原生层的两类崩溃,覆盖所有异常场景:

  • Flutter框架层异常捕获
    覆盖Dart代码抛出的所有同步、异步异常,在应用的main.dart入口初始化时添加如下逻辑:

    import 'package:flutter/foundation.dart';
    import 'dart:io';
    import 'package:path_provider/path_provider.dart';
    
    // 崩溃日志本地存储方法
    Future<void> saveCrashLog(String logContent) async {
      final dir = await getApplicationSupportDirectory();
      final logFile = File('${dir.path}/crash_${DateTime.now().millisecondsSinceEpoch}.log');
      await logFile.writeAsString(logContent);
    }
    
    void main() {
      // 捕获Flutter渲染层同步异常
      FlutterError.onError = (FlutterErrorDetails details) {
        if (kReleaseMode) {
          saveCrashLog(details.toString());
        } else {
          FlutterError.presentError(details);
        }
      };
    
      // 捕获Dart层异步异常
      PlatformDispatcher.instance.onError = (Object error, StackTrace stackTrace) {
        if (kReleaseMode) {
          saveCrashLog('异常信息:$error\n堆栈信息:$stackTrace');
        }
        return true;
      };
    
      runApp(const MyApp());
    }
    
  • Windows原生层崩溃捕获
    覆盖Flutter引擎、原生插件、C++代码抛出的崩溃,在Windows项目的runner/main.cpp文件入口处添加Windows全局异常过滤器:

    #include <windows.h>
    // 全局异常处理回调
    LONG WINAPI CrashHandler(EXCEPTION_POINTERS* exceptionInfo) {
      // 此处可获取异常码、堆栈地址、寄存器信息等,写入本地日志文件
      DWORD exceptionCode = exceptionInfo->ExceptionRecord->ExceptionCode;
      // 省略日志序列化、存储逻辑,生成日志后可以存到应用私有目录
      return EXCEPTION_EXECUTE_HANDLER;
    }
    
    int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, _In_ LPWSTR command_line, _In_ int show) {
      // 注册全局异常捕获
      SetUnhandledExceptionFilter(CrashHandler);
      // 原有初始化逻辑保持不变
      // ...
    }
    

2 客户端崩溃日志上报

运行在用户设备上的应用完全可以获取崩溃报告,按如下逻辑实现即可:

  • 应用每次启动时,先扫描本地存储的崩溃日志文件
  • 检测到未上报的日志时,调用你自己的后端接口上传日志,上传成功后删除本地文件
  • 上报时可以附带系统版本、应用版本、设备架构等辅助信息,方便定位问题

注意事项

  • Debug模式下建议关闭上报,只打印日志,避免测试阶段的无效日志干扰
  • 日志采集需要符合对应地区的数据合规要求,必要时需在用户协议中告知崩溃日志采集规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:09:03