nginx下使用asan和valgrind两个静态检查工具
Posted bewolf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx下使用asan和valgrind两个静态检查工具相关的知识,希望对你有一定的参考价值。
wegit:http://valgrind.org/downloads/valgrind-3.12.0.tar.bz2
tar -jxvf valgrind-3.12.0.tar.bz2
cd valgrind-3.12.0
./configure
make
sudo make install
输入valgrind–h显示valgrind的参数及提示,说明安装成功
sudo valgrind --tool=memcheck --leak-check=full /usr/local/nginx-1.4.2/sbin/nginx ==41400== Memcheck, a memory error detector ==41400== Copyright (C) 2002-2013, and GNU GPL‘d, by Julian Seward et al. ==41400== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info ==41400== Command: /usr/local/nginx-1.4.2/sbin/nginx ==41400== ==41400== Warning: set address range perms: large range [0x957a040, 0x2e45f7e2) (undefined) ==41400== Warning: set address range perms: large range [0x957b040, 0x2e45f040) (defined) nginx: [error] failed to initialize Lua VM in /usr/local/nginx-1.4.2/conf/nginx.conf:125 ==41400== ==41400== HEAP SUMMARY: ==41400== in use at exit: 619,703,912 bytes in 3,285 blocks ==41400== total heap usage: 20,476 allocs, 17,191 frees, 626,783,730 bytes allocated ==41400== ==41400== 128 bytes in 1 blocks are possibly lost in loss record 583 of 650 ==41400== at 0x4C2ABA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==41400== by 0x431D0A: ngx_alloc (ngx_alloc.c:22) ==41400== by 0x4222CE: ngx_crc32_table_init (ngx_crc32.c:117) ==41400== by 0x41A20B: main (nginx.c:320) ==41400== ==41400== 1,024 bytes in 1 blocks are definitely lost in loss record 626 of 650 ==41400== at 0x4C2D136: memalign (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==41400== by 0x4C2D251: posix_memalign (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==41400== by 0x431DBB: ngx_memalign (ngx_alloc.c:57) ==41400== by 0x41B5C2: ngx_create_pool (ngx_palloc.c:21) ==41400== by 0x419F52: main (nginx.c:299) ==41400== ==41400== LEAK SUMMARY: ==41400== definitely lost: 1,024 bytes in 1 blocks ==41400== indirectly lost: 0 bytes in 0 blocks ==41400== possibly lost: 128 bytes in 1 blocks ==41400== still reachable: 619,702,760 bytes in 3,283 blocks ==41400== suppressed: 0 bytes in 0 blocks ==41400== Reachable blocks (those to which a pointer was found) are not shown. ==41400== To see them, rerun with: --leak-check=full --show-leak-kinds=all ==41400== ==41400== For counts of detected and suppressed errors, rerun with: -v ==41400== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
解决的办法是使用 openresty 的 luajit 仓库的 v2.1-agentzh 分支重新: https://github.com/openresty/luajit2/tree/v2.1-agentzh ,然后,重新编译一个特殊版本的 LuaJIT,强制它使用系统的分配器,即在编译 LuaJIT 时使用类似下面的命令: make CCDEBUG=-g Q= XCFLAGS=‘-DLUAJIT_USE_VALGRIND -DLUAJIT_USE_SYSMALLOC‘
--fsanitize=address -fno-omit-frame-pointer -static-libasan
--with-ld-opt="-fsanitize=address -static-libasan"
modified: libs/protobuf/Makefile
modified: src/core/nginx.h
modified: src/core/ngx_array.c
modified: src/core/ngx_array.h
modified: src/core/ngx_palloc.c
modified: src/core/ngx_palloc.h
以上是关于nginx下使用asan和valgrind两个静态检查工具的主要内容,如果未能解决你的问题,请参考以下文章
使用地址清理程序和附加 asan 标志进行静态初始化顺序时出现 g++ 5 和 6 的错误