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

C++异常未输出至cout,运行触发libc++abi.dylib终止错误求助

解决未捕获char*异常导致的程序终止问题

嘿,这个问题我太熟了!你看到的libc++abi.dylib: terminating with uncaught exception of type char const* Abort trap: 6错误,本质是你抛出了一个未被捕获的异常,而且这个异常的类型是const char*——大概率是你直接throw了一个字符串字面量,但没写对应的catch块去处理它,导致程序被系统强制终止了。

先看你可能写出的错误代码场景

比如这段代码运行就会触发你遇到的问题:

#include <iostream>
using namespace std;

int main() {
    int num = 5;
    if (num != 0) {
        throw "num is not 0!"; // 抛出const char*类型的异常,但没有捕获
    }
    return 0;
}

C++规定:如果抛出的异常没有任何catch块能匹配捕获,程序就会调用std::terminate()终止执行,而你看到的就是这个终止过程中输出的错误信息。

两种解决方法

方法1:添加匹配const char*的catch块

直接捕获你抛出的字符串类型异常,然后输出到cout:

#include <iostream>
using namespace std;

int main() {
    try {
        int num = 5;
        if (num != 0) {
            throw "num is not 0!";
        }
    } catch (const char* error_msg) { // 精准匹配const char*类型的异常
        cout << error_msg << endl; // 这里就能把内容输出到cout了
    }
    return 0;
}

方法2:使用标准库异常类(更推荐)

C++标准库提供了std::exception及其派生类(比如std::runtime_error),用它们来抛出异常会更规范,也方便统一处理各种异常:

#include <iostream>
#include <stdexcept> // 必须包含这个头文件
using namespace std;

int main() {
    try {
        int num = 5;
        if (num != 0) {
            throw runtime_error("num is not 0!"); // 抛出标准异常对象
        }
    } catch (const exception& e) { // 捕获所有std::exception派生的异常
        cout << e.what() << endl; // 通过what()方法获取异常信息
    }
    return 0;
}

总结

你并不是对异常机制完全理解错误,只是漏掉了捕获异常的关键步骤——抛出异常后必须有对应的catch块来处理,否则程序就会直接终止。只要补上匹配的catch逻辑,就能正常输出你想要的内容啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:23:15