Nemiver兼容GDB版本咨询及调试冻结问题求助
Nemiver调试冻结问题及版本兼容咨询
问题描述
调试含嵌套lambda表达式的代码时,Nemiver出现严重冻结:
- 触发断点后程序未真正停止,继续按钮处于未激活状态
- 停止按钮点击无反应,调试日志重复输出错误信息
- 无法更新线程、栈帧和变量,只能通过杀死Nemiver进程强制重启
错误日志
|E|bool nemiver::GDBMIParser::parse_member_variable(Glib::ustring::size_type, Glib::ustring::size_type&, nemiver::IDebugger::VariableSafePtr&, bool):nmv-gdbmi-parser.cc:3414:parsing failed for buf: >>>@0x7fffffffb540: {...}<<< cur index was: 2100 |X|bool nemiver::GDBMIParser::parse_member_variable(Glib::ustring::size_type, Glib::ustring::size_type&, nemiver::IDebugger::VariableSafePtr&, bool):nmv-gdbmi-parser.cc:3415:raised exception: should not be reached |E|bool nemiver::GDBEngine::Priv::on_gdb_stdout_has_data_signal(Glib::IOCondition):nmv-gdb-engine.cc:1150:should not be reached
问题触发场景
问题出在执行以下含嵌套lambda的代码行后的operator=()阶段:
var = [this](){return SomeClassConstructor(...).setOnUpdateConverter( [this](){...} );}();
推测是GDB与Nemiver对lambda表达式的兼容限制导致。
咨询问题
- 与Nemiver兼容的最优GDB版本是哪个?
- 是否存在适配新版GDB的Nemiver新版本?
解答
- 最优兼容GDB版本:Nemiver的稳定版本(如1.1.2)对GDB 7.12~8.3版本的兼容性最好,这一区间的GDB对C++ lambda的调试支持成熟,且Nemiver的GDBMI解析逻辑能完美适配。避免使用GDB 9.x及以上版本,因为新版GDB的MI输出格式有较大调整,会触发Nemiver的解析异常(如日志中出现的
parsing failed错误)。 - Nemiver新版本情况:Nemiver的官方更新进度较慢,目前最新的稳定版仍是2018年发布的1.1.2,暂无官方适配新版GDB的正式版本。部分社区维护的分支尝试修复了GDB 9+的兼容问题,但未合并到官方主线,这类分支的稳定性无法保证。
内容的提问来源于stack exchange,提问作者Aquarius Power
相关产品推荐
相关产品推荐

