在 Linux 下用 C++ 程序“闪退/崩溃”是一个非常常见的问题,原因通常可以分成几大类。下面我用通俗 + 实战排查思路给你讲清楚。
这是 Linux C++ 闪退的头号原因。
典型写法:
int* p = nullptr;
*p = 10; // 崩溃
常见场景:
delete 的内存✅ 排查方式:
gdb ./your_program
run
# 崩溃后
bt
C++ 中如果异常没被 catch:
throw std::runtime_error("error");
程序会直接 terminate() → 闪退。
✅ 正确写法:
try {
// 可能抛异常
} catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
}
✅ 全局兜底:
#include <exception>
#include <iostream>
void handler() {
std::cerr << "uncaught exception\n";
abort();
}
int main() {
std::set_terminate(handler);
}
比如:
std::thread 未 join / detachstd::thread t([]{
// do something
});
// 没 join,主线程结束 → 崩溃
✅ 建议:
std::shared_ptrstd::mutexstd::atomic常见错误:
libstdc++.so 版本不一致现象:
double free / undefined symbol✅ 检查:
ldd your_program
nm -D your_lib.so
例如:
static Object obj; // 析构时报错
或全局对象构造失败。
Linux 默认:
✅ 打开核心转储(core dump):
ulimit -c unlimited
./your_program
然后用:
gdb ./your_program core
你可以对照:
你可以贴出:
我可以直接告诉你是哪一行、为什么崩、怎么改。