首页 > 解决方案 > 在 Firefox 中执行 WASM 时,什么是“调试陷阱处理”

问题描述

我已经使用 enscriptem 将大量 C++ 代码编译为 WASM,并且正在尝试优化其性能。这是我的分析器显示的内容:

Total Time Total Cost Self Time Self Cost Samples Function 51,272.77 ms 94.46% 51,272.77 ms 94.46% 29273 调试陷阱处理(在 wasm 中) Gecko 4,434.89 ms 8.17% 0 ms 0% 0 std::__2::__compressed_pa​​ir_elem<std::__2:: basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> >::__rep, 0, false>::__get() const qalc.wasm :3795283 localhost:8000 4,264.99 ms 7.86% 0 ms 0% 0 std::__2::__compressed_pa​​ir<std::__2::basic_string<char, std::__2::char_traits<char>, std::__2::allocator<char> >::__rep , std::__2::allocator<char> >::first() const qalc.wasm :3795198 localhost:8000 2,981.12 ms 5.49% 0 ms 0% 0 免费 qalc.wasm :3867464 localhost:8000

“调试陷阱处理”部分是什么意思,为什么我的代码在其中花费了这么多时间?

标签: c++webassemblyemscriptenfirefox-developer-tools

解决方案


我认为这意味着 Firefox 将 Wasm 编译为适合调试,因此您可以逐行遍历 Wasm,因为分析器是打开的。这通常意味着它被解释了。(它与用于编译 C++ 项目的标志无关。)

不确定是否有办法从命令行进行分析,也许您可​​以尝试插入调用console.profile();来包围您关心的 C++ 代码部分。


推荐阅读