🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
Fault

详细描述

类型定义

typedef void(* ast::ACrashCallback) (const char *crashType, int signalNum, const void *faultAddr, void *const *stackFrames, int frameCount)
 

函数

errc_t ast::aCrashHandlerInstall (ACrashCallback callback)
 
void ast::aCrashHandlerUninstall ()
 
errc_t ast::aCrashHandlerSetLogDir (const char *dir)
 
const char * ast::aCrashHandlerLastLogPath ()
 
errc_t ast::aCrashResolveSymbols (const char *logPath, const char *outPath)
 
errc_t ast::aCrashSetReporterCommand (const char *command)
 
const char * ast::aCrashGetReporterCommand ()
 

类型定义说明

◆ ACrashCallback

typedef void(* ast::ACrashCallback) (const char *crashType, int signalNum, const void *faultAddr, void *const *stackFrames, int frameCount)

崩溃回调函数类型

参数
crashType崩溃类型字符串(如 "SIGSEGV"、"SIGABRT"、"TERMINATE")
signalNum信号编号(terminate 时为 0)
faultAddr故障地址(不可用时为 nullptr)
stackFrames调用栈原始返回地址数组
frameCount调用栈帧数

在崩溃日志写入文件之前调用。回调中不应执行复杂操作(如内存分配)。

函数说明

◆ aCrashGetReporterCommand()

AST_FAULT_API const char * ast::aCrashGetReporterCommand ( )

获取当前设置的报告命令

返回
报告命令字符串(未设置时返回空字符串)

◆ aCrashHandlerInstall()

AST_FAULT_CAPI errc_t ast::aCrashHandlerInstall ( ACrashCallback callback)

安装崩溃处理器

参数
callback可选的用户回调,在写入崩溃日志前调用
返回
eNoError 成功,eError 其他错误

注册以下处理器:

  • Linux: SIGSEGV、SIGABRT、SIGFPE、SIGILL 的 sigaction 处理器
  • Windows: 未处理异常过滤器(SEH)和 SIGABRT 信号处理器
  • 跨平台: std::terminate 处理器(未捕获的 C++ 异常)

重复安装是安全的(第二次调用无操作)。

◆ aCrashHandlerLastLogPath()

AST_FAULT_API const char * ast::aCrashHandlerLastLogPath ( )

获取最后一次崩溃日志的完整路径

返回
日志文件路径(尚未发生崩溃时返回空字符串)

◆ aCrashHandlerSetLogDir()

AST_FAULT_CAPI errc_t ast::aCrashHandlerSetLogDir ( const char * dir)

设置崩溃日志输出目录

参数
dir目录路径(内部会复制到固定大小的缓冲区,最大 511 字符)
返回
eNoError 成功,eError 路径过长

默认目录为 aDataDir() + "/crash/"。如指定目录不存在,将尝试创建。

◆ aCrashHandlerUninstall()

AST_FAULT_CAPI void ast::aCrashHandlerUninstall ( )

卸载崩溃处理器

将所有处理器恢复为默认行为。重复卸载是安全的。

◆ aCrashResolveSymbols()

AST_FAULT_CAPI errc_t ast::aCrashResolveSymbols ( const char * logPath,
const char * outPath )

解析崩溃日志中的堆栈地址,附加符号信息

参数
logPath原始崩溃日志文件路径
outPath输出文件路径(为 nullptr 时覆盖原文件)
返回
eNoError 成功,eError 打开文件失败或格式错误

在正常上下文中调用(非信号处理器),解析原始地址的符号信息:

  • Windows: 使用 SymFromAddr + SymGetLineFromAddr64 (DbgHelp)
  • Linux: 使用 dladdr + addr2line

将 "#NN 0x..." 行替换为 "#NN 0x... functionName [file.cpp:line]" 格式。 需要调试符号(.pdb / 未strip的 .so)可用时才能解析到文件名和行号。

◆ aCrashSetReporterCommand()

AST_FAULT_CAPI errc_t ast::aCrashSetReporterCommand ( const char * command)

设置崩溃后的报告命令

参数
command崩溃后执行的命令(如崩溃报告程序路径)

崩溃处理器写完日志后,将调用此命令并传入日志路径作为参数。 设为 nullptr 则使用默认行为(Windows: MessageBox,Linux: stderr)。

命令格式: "command --flag" — 日志路径会作为最后一个参数追加。 仅在程序启动时(非信号上下文中)调用此函数。