Flutter中如何输出Windows原生C++端日志并捕获应用崩溃信息
Windows C++ 侧 Flutter 插件崩溃日志查看方案
系统原生工具捕获(无需修改代码)
- 事件查看器查询崩溃记录:按下
Win+R输入eventvwr回车打开事件查看器,依次展开 Windows 日志>应用程序,在来源列筛选你的 Flutter 应用 exe 名称,错误级别的事件条目会记录崩溃模块、内存偏移地址、异常错误码等 C++ 侧崩溃核心上下文。 - 实时生成进程转储文件:应用崩溃弹窗出现后先不要关闭弹窗,打开任务管理器找到对应应用进程,右键选择 创建转储文件,生成的 dmp 转储文件路径会自动弹出,使用 Visual Studio 或 WinDbg 打开即可查看完整 C++ 侧调用栈、异常触发位置。
开发阶段嵌入捕获逻辑方案
- 全局异常捕获自动生成转储:在 C++ 插件初始化时调用
LPTOP_LEVEL_EXCEPTION_FILTER注册全局异常过滤器,异常触发时调用 Windows 原生MiniDumpWriteDumpAPI 自动将崩溃转储文件写入应用公共目录,无需手动操作即可留存崩溃现场。 - 调试器附加定位:启动 Flutter 应用后,在 Visual Studio 中打开 C++ 插件项目,点击 调试>附加到进程 选择对应 Flutter 应用进程,勾选本机调试选项,崩溃时调试器会直接停在异常触发位置,自动展示调用栈、变量值、错误原因。
- C++ 日志输出配置:Flutter Windows 官方模板默认不会将 C++ 侧标准输出打印到 Flutter 控制台,可在 C++ 代码中调用
OutputDebugStringAPI 输出日志,配合 DebugView 工具即可实时查看 C++ 侧运行日志,也可自行实现文件日志写入逻辑留存历史日志。
崩溃定位注意事项
- 编译 C++ 插件时必须保留对应 pdb 符号文件,崩溃转储文件必须和编译时的 pdb 匹配才能解析出准确的函数名、代码行号信息,发布版本不要关闭调试符号生成选项。
- 优先排查 C++ 侧空指针访问、内存越界、资源重复释放等常见问题,Flutter 与 C++ 通道传递自定义结构体、指针类型参数时,需严格管控生命周期,避免 Flutter 侧已释放的资源被 C++ 侧继续访问。
内容的提问来源于stack exchange,提问作者Khamidjon Khamidov
相关产品推荐
相关产品推荐

