And use valgrind asan two static checking tool under nginx

1、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

Enter valgrind valgrind-h display of parameters and prompts, the installation is successful

 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)

The solution is to use openresty of luajit warehouse v2.1-agentzh branch re:  https://github.com/openresty/luajit2/tree/v2.1-agentzh  , then recompile a special version of LuaJIT, force it using a dispenser system, i.e., using a command like LuaJIT at compile time:  the make CCDEBUG = -g = Q = XCFLAGS '- DLUAJIT_USE_VALGRIND -DLUAJIT_USE_SYSMALLOC'  

 
Compile script does the following modifications:
 
Starting method
 
2, easy
(1) is adapted Code:
Compile script add:

--fsanitize=address -fno-omit-frame-pointer -static-libasan
--with-ld-opt="-fsanitize=address -static-libasan"

makefile中添加 :-fsanitize=address -fno-omit-frame-pointer -static-libasan
nginx adapter itself needs some documents, otherwise, would be mistaken for a memory leak.
Modify the following files:
 modified:   libs/libwtf/GNUmakefile
 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
(2) Installation clang
(3) compile a new version up and running, and then view the log
By default, asan experiencing memory issues, it will terminate execution of the current process, call stack information and print-related issues, and the problems in the log file error.log spanner in.
Line generation function call stack is only one address, no sign information may be generated get down call stack,

Guess you like

Origin www.cnblogs.com/bewolf/p/11515289.html
Recommended