vaynedu / nginx-1.16.0

学习nginx架构设计与实现,翻译nginx的源码,写nginx的测试代码, 在issue中记录nginx的精妙设计及其常见问题https://github.com/vaynedu/nginx-1.16.0/issues 。 myexercise内存池、哈希表、链表、md5、crc测试代码,mymodule中有hello自定义模块代码。通过nginx将自己整个知识体系连接起来
https://github.com/vaynedu/nginx-1.16.0/issues
BSD 2-Clause "Simplified" License
12 stars 2 forks source link

ngx_log_debug设计不合理? #6

Open vaynedu opened 5 years ago

vaynedu commented 5 years ago

自己编写的代码引用nginx源文件的时候core掉,突然发现是ngx_log_debug3问题,core栈如下

(gdb) bt
  #0  ngx_memalign (alignment=alignment@entry=16, size=size@entry=1024, log=log@entry=0x0) at src/os/unix/ngx_alloc.c:84
  #1  0x0000000000400a61 in ngx_create_pool (size=1024, log=0x0) at src/core/ngx_palloc.c:23
  #2  0x0000000000403405 in main () at myngx_pool.c:58
  (gdb) f 0
  #0  ngx_memalign (alignment=alignment@entry=16, size=size@entry=1024, log=log@entry=0x0) at src/os/unix/ngx_alloc.c:84
        84          ngx_log_debug3(NGX_LOG_DEBUG_ALLOC, log, 0,
  (gdb)

分析 & 问题原因 log为空的时候就直接core掉

#define ngx_log_debug(level, log, args...)                                    \
    if ((log)->log_level & level)                                             \
        ngx_log_error_core(NGX_LOG_DEBUG, log, args)

需要改进的地方, 至少应该判断log是否为NULL再去log->xx 成员

vaynedu commented 5 years ago

解决方案: 原来自己开启--with-debug功能,编译的时候关闭就好