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

C++编译Lua协程yield抛异常致CLion调试频繁暂停的解决及性能疑问

CLion 异常暂停过滤配置

操作步骤如下:

  • 打开断点配置面板,快捷键为 Ctrl+Shift+F8(Windows/Linux)或 Cmd+Shift+F8(macOS)
  • 在断点列表中找到 C++ Exceptions 分类下的 Any C++ exception 项,右键选择「编辑断点」
  • 在弹出的配置窗口中找到「按类型过滤」/「排除类型」配置项,添加 lua_longjmp 到排除列表中(C++编译Lua默认抛出的协程、错误跳转异常均为该类型,若你自定义了Lua异常类型,替换为对应类型名即可)
  • 保存配置后重启调试即可,后续仅非Lua抛出的C++异常会触发调试暂停

频繁异常抛出的性能影响

性能损耗分两种场景:

  • 无异常抛出的正常执行路径:现代编译器普遍实现了零开销异常机制,该场景下性能和setjmp版本几乎无差异
  • 异常抛出的执行路径:也就是你项目中每帧协程yield的场景,异常抛出+栈展开的开销远高于setjmp直接跳转,高频触发下在游戏性能敏感场景、尤其是移动端低性能设备上会产生可观测的性能损耗

如果实际测试发现性能不符合预期,也可以在保留C编译Lua的前提下改造源码:将yield等控制流跳转的throw逻辑单独拆分,改用自定义跳转实现,仅在真正的错误场景保留异常抛出,兼顾C栈对象自动析构和运行性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:06:01