崩溃机制

NW.js崩溃时 , 将在桌面创建名为 .dmp格式的minidump报告,解码 minidump文件提取堆栈跟踪可查看问题详情。

解码 minidump文件提取堆栈跟踪,您需要三个条件:

获取minidump文件

NW.js崩溃时在不同系统中生成minidump的路径:

上文的 <name-in-manifest>配置文件文件中的 name字段.

!!! "Linux Minidump文件中的Strip标头"需知: Linux系统中生成的minidump文件会附带头文本信息,解码之前必须将其剥离。真正minidump文件内容由 MDMP开头,之前的内容是不可读的 , 可以直接删除。

整理Symbol文件(.sym)

您可在NW.js下载包中找到发布的NW.js的Symbol文件. 该(.sym)文件可从下载包中提取; 注意,该(.sym)文件必须正确命名以便使用 minidump_stackwalk . minidump_stackwalk 使用了 simple symbol supplier 来查找 symbol 文件. 以下是查找symbol 文件的方式

该工具将尝试按照以下模式搜索.sym文件: {SYMBOLS_ROOT}/{DEBUG_FILE_NAME}/{DEBUG_IDENTIFIER}/{DEBUG_FILE_NAME_WITHOUT_PDB}.sym

使用 minidump_stackwalk 解码 Minidump

minidump_stackwalk能够使用NW.js构建 . Linux和Mac系统的报告器代码中直接构建 . Windows系统中使用Cygwin预制构建 .

要从minidump 文件获取堆栈跟踪,请运行以下命令:

minidump_stackwalk minidump_file.dmp /path/to/symbols_root 2>&1

如果条目文件不能正确整理 , 仍然可以使用该工具获取 . 但不能查看 , 最后部分会输出警告 - Loaded modules,如下所示:

0x00240000 - 0x02b29fff nw.exe ??? (main) (WARNING: No symbols, nw.exe.pdb, 669008F7B6EE44058CBD5F21BEB5B5CFe)

触发崩溃以测试

测试崩溃机制特性 , NW.js提供APIs触发崩溃: App.crashBrowser()App.crashRenderer(). 分别是崩溃浏览器进程和渲染进程 .

参考文献