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

CMake编译Geant4调试时触发Abort() has been called报错排查

问题描述

通过CMake成功完成编译后,遇到如下问题:

报错弹窗截图

调试运行时弹出Abort() has been called报错,点击Retry按钮后无任何响应,仅能收回命令行提示符控制权,直接在终端运行程序的输出如下:

(base) PS C:\geant4\build\Debug> toy_ex.exe

**************************************************************
 Geant4 version Name: geant4-11-00-patch-01 [MT]   (8-March-2022)
                       Copyright : Geant4 Collaboration
                      References : NIM A 506 (2003), 250-303
                                 : IEEE-TNS 53 (2006), 270-278
                                 : NIM A 835 (2016), 186-225
                             WWW : http://geant4.org/
**************************************************************

(base) PS C:\geant4\build\Debug>

程序本身可正常运行,核心诉求是正确配置编译器的调试模式,以便后续基于Geant4开发扩展功能时可获取尽可能多的调试排查信息。

补充信息

以下是生成的.sln解决方案文件内容:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "ALL_BUILD.vcxproj", "{864FDEB9-6432-307E-9AA5-54FC01B38A99}"
    ProjectSection(ProjectDependencies) = postProject
        {1B4B775D-725E-344B-8220-F2A19C0E8B19} = {1B4B775D-725E-344B-8220-F2A19C0E8B19}
        {5794228B-9573-38C7-9F64-CA83A5E015D5} = {5794228B-9573-38C7-9F64-CA83A5E015D5}
    EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TOY_EXAMPLE", "TOY_EXAMPLE.vcxproj", "{7C821F0C-2DA7-300C-9FB9-636C29E1D59D}"
    ProjectSection(ProjectDependencies) = postProject
        {1B4B775D-725E-344B-8220-F2A19C0E8B19} = {1B4B775D-725E-344B-8220-F2A19C0E8B19}
        {5794228B-9573-38C7-9F64-CA83A5E015D5} = {5794228B-9573-38C7-9F64-CA83A5E015D5}
    EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "ZERO_CHECK.vcxproj", "{1B4B775D-725E-344B-8220-F2A19C0E8B19}"
    ProjectSection(ProjectDependencies) = postProject
    EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "toy_ex", "toy_ex.vcxproj", "{5794228B-9573-38C7-9F64-CA83A5E015D5}"
    ProjectSection(ProjectDependencies) = postProject
        {1B4B775D-725E-344B-8220-F2A19C0E8B19} = {1B4B775D-725E-344B-8220-F2A19C0E8B19}
    EndProjectSection
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|x64 = Debug|x64
        Release|x64 = Release|x64
        MinSizeRel|x64 = MinSizeRel|x64
        RelWithDebInfo|x64 = RelWithDebInfo|x64
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {864FDEB9-6432-307E-9AA5-54FC01B38A99}.Debug|x64.ActiveCfg = Debug|x64
        {864FDEB9-6432-307E-9AA5-54FC01B38A99}.Release|x64.ActiveCfg = Release|x64
        {864FDEB9-6432-307E-9AA5-54FC01B38A99}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
        {864FDEB9-6432-307E-9AA5-54FC01B38A99}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
        {7C821F0C-2DA7-300C-9FB9-636C29E1D59D}.Debug|x64.ActiveCfg = Debug|x64
        {7C821F0C-2DA7-300C-9FB9-636C29E1D59D}.Release|x64.ActiveCfg = Release|x64
        {7C821F0C-2DA7-300C-9FB9-636C29E1D59D}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
        {7C821F0C-2DA7-300C-9FB9-636C29E1D59D}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
        {1B4B775D-725E-344B-8220-F2A19C0E8B19}.Debug|x64.ActiveCfg = Debug|x64
        {1B4B775D-725E-344B-8220-F2A19C0E8B19}.Debug|x64.Build.0 = Debug|x64
        {1B4B775D-725E-344B-8220-F2A19C0E8B19}.Release|x64.ActiveCfg = Release|x64
        {1B4B775D-725E-344B-8220-F2A19C0E8B19}.Release|x64.Build.0 = Release|x64
        {1B4B775D-725E-344B-8220-F2A19C0E8B19}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
        {1B4B775D-725E-344B-8220-F2A19C0E8B19}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
        {1B4B775D-725E-344B-8220-F2A19C0E8B19}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
        {1B4B775D-725E-344B-8220-F2A19C0E8B19}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
        {5794228B-9573-38C7-9F64-CA83A5E015D5}.Debug|x64.ActiveCfg = Debug|x64
        {5794228B-9573-38C7-9F64-CA83A5E015D5}.Debug|x64.Build.0 = Debug|x64
        {5794228B-9573-38C7-9F64-CA83A5E015D5}.Release|x64.ActiveCfg = Release|x64
        {5794228B-9573-38C7-9F64-CA83A5E015D5}.Release|x64.Build.0 = Release|x64
        {5794228B-9573-38C7-9F64-CA83A5E015D5}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
        {5794228B-9573-38C7-9F64-CA83A5E015D5}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
        {5794228B-9573-38C7-9F64-CA83A5E015D5}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
        {5794228B-9573-38C7-9F64-CA83A5E015D5}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {297A9E1A-FABA-3B58-9C68-28A09C508BAE}
    EndGlobalSection
    GlobalSection(ExtensibilityAddIns) = postSolution
    EndGlobalSection
EndGlobal

Visual Studio配置界面截图:
VS配置截图


解决方案

报错本质是Geant4多线程默认配置和VS调试器的运行时库匹配冲突导致的,按以下步骤配置即可获得完整调试能力:

  • 优先选择RelWithDebInfo编译配置
    官方分发的Geant4预编译包默认使用RelWithDebInfo参数编译,直接选Debug配置会因为运行时库版本不匹配触发abort调用。RelWithDebInfo会开启O2优化同时生成完整PDB调试符号,支持断点命中、变量查看、调用栈追踪等全部调试功能,运行稳定性和Release版本一致,完全满足开发阶段调试需求。直接在VS顶部配置下拉框选择RelWithDebInfo|x64,右键解决方案重新生成即可。
  • 必须使用纯Debug模式时重新编译Geant4依赖
    自行编译Geant4源码阶段,在CMake配置时加上-DCMAKE_BUILD_TYPE=Debug参数,保证Geant4链接的调试版运行时库和你项目的Debug配置一致,编译完成后重新配置你的项目,链接到Debug版Geant4库即可解决abort报错。
  • 调试阶段临时关闭Geant4多线程模式
    不需要测试多线程逻辑时,可以在项目CMakeLists.txt中添加编译定义关闭MT模式:
    add_compile_definitions(G4MULTITHREADED=0)
    
    单线程模式不会触发多线程调试的异常捕获逻辑,调试时可以直接拿到崩溃点的完整调用栈,不会出现点击Retry无响应的问题。
  • 配置VS调试器直接捕获异常
    打开VS的调试->窗口->异常设置,勾选Win32 Exceptions分类下的所有C++异常,程序触发异常时会直接停在出错的代码行,不会弹出通用abort弹窗。

配置完成后可自行验证:在自定义的用户动作类中打一个断点,启动调试能正常命中断点、支持单步步进和变量查看即为配置生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:36:20