常规更新
This commit is contained in:
@@ -1,66 +1,54 @@
|
||||
#include <iostream>
|
||||
#include <utility>
|
||||
#include "Core/Base/global_include.h"
|
||||
#include "Core/spdlog/export.h"
|
||||
#include "Core/system/export.h"
|
||||
#include "export.h"
|
||||
#include <iostream>
|
||||
#include <utility>
|
||||
namespace Psc {
|
||||
|
||||
// std::exit std::terminate 的核心区别就是 是否需要生成core_dump 文件
|
||||
|
||||
// std::terminate() 到底做了什么(标准层面)
|
||||
// 默认行为:调用 std::abort()
|
||||
// abort() → 发送 SIGABRT
|
||||
// 在 Linux/systemd 下:
|
||||
// SIGABRT 通常生成 core
|
||||
// 前提:
|
||||
// ulimit -c ≠ 0
|
||||
// LimitCORE 允许
|
||||
// 未被 coredump 规则拦截
|
||||
// 典型触发场景:
|
||||
// 未捕获异常
|
||||
// noexcept 函数抛异常
|
||||
// 明确选择 Fail-Fast
|
||||
// terminate 的职责:
|
||||
// 定义 “此时必须终止” 的 语言语义
|
||||
// 调用 terminate handler
|
||||
// 允许用户替换策略(std::set_terminate)
|
||||
// std::set_terminate([]{
|
||||
// log_fatal();
|
||||
// std::abort();
|
||||
// });
|
||||
|
||||
|
||||
// std::exit() 到底做了什么(标准层面)
|
||||
// C++ 标准规定,std::exit() 会:
|
||||
// 调用 所有 std::atexit() 注册的函数(逆序)
|
||||
// 刷新并关闭标准 I/O
|
||||
// 结束进程
|
||||
|
||||
// TODO: 未被管理的线程的 线程安全问题
|
||||
std::atomic_int stop_program = 0;
|
||||
|
||||
|
||||
|
||||
std::function<void(std::string)> g_fail_fast = [](std::string msg) {
|
||||
std::cout << get_current_time_as_string() << " 默认快速失败触发!(不生成core_dump_文件) " << VAR_STR_1(msg) << " 系统错误码:" << get_error_message() << std::endl;
|
||||
std::cout << LOG_POS << std::endl;
|
||||
std::exit(75);
|
||||
};
|
||||
void fail_fast(std::string msg) {
|
||||
g_fail_fast(std::move(msg));
|
||||
}
|
||||
|
||||
void set_fail_fast(std::function<void(std::string)> ff) {
|
||||
std::cout << "set_fail_fast 覆盖默认主动失败处理函数" << std::endl;
|
||||
g_fail_fast = std::move(ff);
|
||||
}
|
||||
|
||||
|
||||
void fail_fast_core_dump(std::string msg) {
|
||||
std::cout << get_current_time_as_string() << " 默认快速失败触发!(生成core_dump_文件) " << VAR_STR_1(msg) << " 系统错误码:" << get_error_message() << std::endl;
|
||||
std::cout << LOG_POS << std::endl;
|
||||
std::terminate();
|
||||
}
|
||||
|
||||
// std::exit std::terminate 的核心区别就是 是否需要生成core_dump 文件
|
||||
// std::terminate() 到底做了什么(标准层面)
|
||||
// 默认行为:调用 std::abort()
|
||||
// abort() → 发送 SIGABRT
|
||||
// 在 Linux/systemd 下:
|
||||
// SIGABRT 通常生成 core
|
||||
// 前提:
|
||||
// ulimit -c ≠ 0
|
||||
// LimitCORE 允许
|
||||
// 未被 coredump 规则拦截
|
||||
// 典型触发场景:
|
||||
// 未捕获异常
|
||||
// noexcept 函数抛异常
|
||||
// 明确选择 Fail-Fast
|
||||
// terminate 的职责:
|
||||
// 定义 “此时必须终止” 的 语言语义
|
||||
// 调用 terminate handler
|
||||
// 允许用户替换策略(std::set_terminate)
|
||||
// std::set_terminate([]{
|
||||
// log_fatal();
|
||||
// std::abort();
|
||||
// });
|
||||
// std::exit() 到底做了什么(标准层面)
|
||||
// C++ 标准规定,std::exit() 会:
|
||||
// 调用 所有 std::atexit() 注册的函数(逆序)
|
||||
// 刷新并关闭标准 I/O
|
||||
// 结束进程
|
||||
// TODO: 未被管理的线程的 线程安全问题
|
||||
std::atomic_int stop_program = 0;
|
||||
std::function<void(std::string)> g_fail_fast = [](std::string msg) {
|
||||
std::cout << get_current_time_as_string() << " 默认快速失败触发!(不生成core_dump_文件) " << VAR_STR_1(msg) << " 系统错误码:" << get_error_message() << std::endl;
|
||||
std::cout << LOG_POS << std::endl;
|
||||
std::exit(75);
|
||||
};
|
||||
void fail_fast(std::string msg) {
|
||||
g_fail_fast(std::move(msg));
|
||||
}
|
||||
void set_fail_fast(std::function<void(std::string)> ff) {
|
||||
std::cout << "set_fail_fast 覆盖默认主动失败处理函数" << std::endl;
|
||||
g_fail_fast = std::move(ff);
|
||||
}
|
||||
void fail_fast_core_dump(std::string msg) {
|
||||
std::cout << get_current_time_as_string() << " 默认快速失败触发!(生成core_dump_文件) " << VAR_STR_1(msg) << " 系统错误码:" << get_error_message() << std::endl;
|
||||
std::cout << LOG_POS << std::endl;
|
||||
std::terminate();
|
||||
}
|
||||
} // namespace Psc
|
||||
|
||||
Reference in New Issue
Block a user