ngx_debug_point
1 定义ngx_debug_point 函数 定义在 ./nginx-1.24.0/src/os/unix/ngx_process.cvoidngx_debug_point(void){ngx_core_conf_t*ccf;ccf(ngx_core_conf_t*)ngx_get_conf(ngx_cycle-conf_ctx,ngx_core_module);switch(ccf-debug_points){caseNGX_DEBUG_POINTS_STOP:raise(SIGSTOP);break;caseNGX_DEBUG_POINTS_ABORT:ngx_abort();}}这是一个 Nginx 中用于辅助调试的钩子函数。 它主要供开发者在源码里插入“调试点” 运行时根据 debug_points 配置项的值让进程主动停止或被终止 以便调试器如 gdb介入无需重新编译即可打开调试开关。2 详解voidngx_debug_point(void){ngx_core_conf_t*ccf;ccf(ngx_core_conf_t*)ngx_get_conf(ngx_cycle-conf_ctx,ngx_core_module);switch(ccf-debug_points){caseNGX_DEBUG_POINTS_STOP:raise(SIGSTOP);break;caseNGX_DEBUG_POINTS_ABORT:ngx_abort();}}#1 获取当前 Nginx 周期的核心模块配置#2 根据 debug_points 配置的枚举值进行多路分支 该字段由配置文件中的 debug_points 指令赋值 可能的值有 NGX_DEBUG_POINTS_STOP 和 NGX_DEBUG_POINTS_ABORT。 此时决定触发哪种调试行为。#3 case NGX_DEBUG_POINTS_STOP: 作用匹配 debug_points stop; 配置。 当需要进程在调试点停止时执行此分支。 raise(SIGSTOP); 作用向自身进程发送 SIGSTOP 信号。 SIGSTOP 是不可忽略、不可被捕获的作业控制信号会立即使进程暂停类似 CtrlZ。 此时开发人员可以用 gdb -p pid 附加到该进程查看调用栈、变量等然后发送 SIGCONT 继续运行。 实现了“暂停等待调试器”的效果。#4 case NGX_DEBUG_POINTS_ABORT: 作用匹配 debug_points abort; 配置。 当需要进程异常终止并产生 core dump 时执行此分支。 ngx_abort(); 作用调用 Nginx 封装的终止函数通常最终会调用 abort() 产生 SIGABRT。 进程异常终止若系统配置允许则转储 core 文件。 开发者可以事后用 gdb 分析 core dump 查看崩溃时完整的内存和调用栈信息。 这种方式适合不易在线的条件下进行调试。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2565048.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!