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

调试监视未初始化boost::optional致程序崩溃:责任归属?

调试空boost::optional触发程序崩溃问题

复现步骤

  • 编写包含空boost::optional(例如变量b)的程序,用以下命令编译:g++ -std=c++17 -O0 -g ...
  • 在程序任意位置设置断点
  • 通过vscode-cpptools调试适配器启动调试,等待程序命中断点
  • 对*b添加监视

崩溃报错信息

debugging: /usr/include/boost/optional/optional.hpp:1271:
boost::optional<T>::reference_type boost::optional<T>::get()
[with T = int; reference_type = int&]: Assertion `this->is_initialized()' failed.

疑问

程序本身并未触发未定义行为(UB),仅调试时添加监视的操作就导致崩溃,为何会出现这种情况?问题的责任方是谁?

临时解决方案与推测

切换为std::optional或改用CodeLLDB调试适配器可解决该问题,推测问题可能出在boost::optional、vscode-cpptools,甚至两者均存在问题。另外,使用命令行gdb调试也可复现该问题。

示例程序

#include <boost/none.hpp>
#include <boost/optional/optional.hpp>
#include <optional>
#include <iostream>

int main()
{
    auto s = std::optional<int>{};
    auto b = boost::optional<int>{};
    if (s) {
        std::cout << *s << std::endl;
    }
    if (b) {
        std::cout << *b << std::endl;
    }
    std::cout << "done" << std::endl;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:45:03