【问题标题】:Random error in exe_common.inl in Debug build调试版本中 exe_common.inl 中的随机错误
【发布时间】:2022-09-16 19:55:59
【问题描述】:

我正在使用 VS 2022 社区版 (v17.3.3) 使用 C++ (v14.3 - 最新 C++ 的功能) 构建 wxWidgets 应用程序 (v3.2.0)。 Windows SDK 使用的是最新安装的 (10.0.22621)。该项目还使用 C++ 模块。

Debug 构建成功,但是当我随机运行项目的 exe 文件时,它会引发异常(访问冲突读取 0xFFFFFF (ucrtbased.dll)) 在exe_common.inl在以下行:

__scrt_current_native_startup_state = __scrt_native_startup_state::initialized;

经过几次编译(只需进行微小的更改即可触发编译),它成功并且 exe 正确运行。

我想知道是否有任何设置可能导致此随机错误。顺便说一句,我使用的是 Win11,但同样的事情也发生在 Win10 上。

提前致谢。

编辑1:

该项目正在使用 boost 库,并且在启动时 boost/json (boost/json 也用于项目的其他部分)。调试器显示,在以下行之后发生了上述错误:

static allocator_arg_t allocator_arg = BOOST_CONTAINER_DOC1ST(unspecified, *std_allocator_arg_holder<>::dummy);

【问题讨论】:

  • 您是否尝试过使用您的 debugger 调查此问题?如果没有,那么这应该是你要做的第一件事。
  • 是的,这就是调试器在__scrt_current_native_startup_state = __scrt_native_startup_state::initialized; 处停止的地方
  • 如果您展开堆栈框架(在堆栈框架窗口中),您会返回您的代码吗?如果是这样,请检查该堆栈帧中的变量。
  • @RichardCritten:我认为这个问题已经开始,因为切换到 C++ 中的模块并且目前正在尝试禁用“多处理器编译”,到目前为止问题还没有发生。
  • @macroland,您可以尝试使用早期版本的 MSVC 构建吗?我想最近有一个帖子证明这个版本是错误的......

标签: c++ visual-studio wxwidgets


【解决方案1】:

有几点需要注意:

  1. 已停止使用wxSQLite(该库已超过十年未维护),
  2. 主框架是单例数据结构,不再是,也不再是从 wxMDIFrame 派生的。
  3. 所有不必要的(一连串)#include 已删除。
  4. 删除了一些文件中包含的&lt;boost/json.hpp&gt;,现在仅在一个.cpp 文件中使用#include &lt;boost/json/src.hpp&gt;。但是,该项目仍然使用在多个 .h 文件中包含 &lt;boost/json/value.hpp&gt;
  5. 所有未初始化的指针变量和其他变量都已初始化。

    调试器特别指出了#1 和#4。现在已经有几天多了,从那以后就没有问题了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2010-12-06
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    相关资源
    最近更新 更多