用途:诊断和修复 PHP.wasm 主二进制的崩溃,涵盖 Asyncify 解卷/回卷失败、JSPI 挂起错误、内存增长缺陷和运行时 WASM 陷阱。
主要能力:提供错误信息对照表。Asyncify 错误如 RuntimeError: unreachable(调用栈中某函数缺失于 ASYNCIFY_ONLY)、memory access out of bounds(缺少 opcode 处理器)、null function or signature mismatch、table index is out of bounds;这些之后出现的次生错误(未定义变量、状态损坏)是回卷损坏导致的误导。JSPI 错误如 SuspendError: trying to suspend JS frames(JS 帧夹在两个 WASM 帧之间)、SuspendError: trying to suspend without WebAssembly.promising(调用挂起 JS 导入的 WASM 函数不在 JSPI_EXPORTS 中)。同一缺失函数在不同 PHP 版本会报不同错误,须核对 WASM 栈顶函数。
使用方式:运行测试时加 --stack-trace-limit=200;从异步触发点(如 _emscripten_sleep、_wasm_recv)反向追溯调用链,优先给 opcode 处理器插桩;每次只向 ASYNCIFY_ONLY 添加一个函数并重编译重测。需插桩的包括 opcode 处理器、桥接函数、同一作用域内挂起前的清理函数;异步返回后运行的函数和错误格式化函数则不需要。JSPI 调试需为 Vitest/Node 加 --experimental-wasm-jspi(vite.config.ts 中 poolOptions.forks.execArgv 添加),用 wasm-feature-detect 的 jspi() 分支。同步 JS 导入不可标记 isAsync=true,否则 JSPI 包装会破坏调用栈导致堆损坏,应设 functionName__async: false。内存增长问题需用访问器对象封装 HEAP 视图,避免暴露原始类型数组。测试命令示例:PHP=8.0 npm run test-group-3-asyncify;NODE_OPTIONS='--stack-trace-limit=200' npx nx test php-wasm-node。
适用场景:PHP.wasm 在 Node/浏览器中的崩溃排查、JSPI 与 Asyncify 路径切换、WASM-JS 边界问题追踪。
限制:资料未提供具体的官方支持范围、版本兼容承诺和收费信息,暂未提供。