Tor子系统——报错模块
Tor报错模块位于src/lib/err/
文件夹,用于监听Tor运行过程中发生的错误,并输出错误信息
子系统结构
const subsys_fns_t sys_torerr = { .name = "err", /* Low-level error handling is a diagnostic feature, we want it to init * right after windows process security, and shutdown last. * (Security never shuts down.) */ .level = -99, .supported = true, .initialize = subsys_torerr_initialize, .shutdown = subsys_torerr_shutdown };
初始化子系统
该系统初始化首先会将version
拼接到bt_version
中(类似Tor version 0.4.4.0-alpha-dev (git-a6509cb86744f8f2)
的格式)
接下来会用到sigaction1,这是一个监听信号的库,当进程收到信号时,会执行对应的函数,在这里设置的是SA_SIGINFO
函数,说明使用sa_sigaction
对应的函数接收信号,而非sa_handler
信号 | 解释 |
---|---|
SIGSEGV |
发生段错误时触发4 |
SIGILL |
非法访问时触发 |
SIGFPE |
算术错误如除零、溢出时触发5 |
SIGBUS |
发生总线错误时触发6 |
SIGSYS |
发生系统调用错误 |
SIGIO |
发生IO错误时触发 |
当有以上信号发生时(错误信号),会回调src/lib/err/backtrace.c
的static void crash_handler(int sig, siginfo_t *si, void *ctx_)
函数,并输出相应的回溯信息
销毁子系统
在卸载时,则会取消之前监听的信号