my life

day to day

Archive for July, 2006

Waxing

Saturday, July 29th, 2006

add to del.icio.us    add to technorati favs   email this

2006 M5 Drifting on Narrow Country Road

Saturday, July 29th, 2006

add to del.icio.us    add to technorati favs   email this

Old BMW 5 Series Drifting

Saturday, July 29th, 2006

add to del.icio.us    add to technorati favs   email this

SLK 55 AMG (w/ SLR engine) vs Enzo

Saturday, July 29th, 2006

add to del.icio.us    add to technorati favs   email this

Watch Steve Pass Out

Saturday, July 29th, 2006

add to del.icio.us    add to technorati favs   email this

Vato Street Fighting

Saturday, July 29th, 2006

add to del.icio.us    add to technorati favs   email this

Using Valgrind with PHP

Saturday, July 15th, 2006

Download source version of PHP that you want to debug

Configure and Make 

./configure --prefix=/home/erik/php --enable-sigchild --with-openssl --with-zlib --with-curl --with-curlwrappers --enable-mbstring --enable-pgsql --enable-mysql --enable-pcntl --enable-sockets --enable-zend-multibyte --enable-debug --disable-zend-memory-manager make clean all install

The most important flags have been highlighted. Take care to change your installation path (prefix) to some development environment and not your system’s production environment.

Enabling debug is for GDB and not essential for Valgrind.

Run Valgrind

valgrind --tool=memcheck --leak-check=full ./sample.php

It will intercept all possible Seg Faults and attempt to maintain execution. After you terminate the application, you’ll get output that resembles:

==13501== ==13501== ERROR SUMMARY: 45 errors from 3 contexts (suppressed: 31 from 1) ==13501== malloc/free: in use at exit: 1471 bytes in 46 blocks. ==13501== malloc/free: 2199156 allocs, 2199110 frees, 81359317 bytes allocated. ==13501== For counts of detected errors, rerun with: -v ==13501== searching for pointers to 46 not-freed blocks. ==13501== checked 1004344 bytes. ==13501== ==13501== ==13501== 144 bytes in 9 blocks are definitely lost in loss record 7 of 10 ==13501==    at 0×1B908222: malloc (vg_replace_malloc.c:130) ==13501==    by 0×824DFA3: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:182) ==13501==    by 0×824D9AC: execute (zend_vm_execute.h:92) ==13501==    by 0×824DBEB: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:234) ==13501==    by 0×824D9AC: execute (zend_vm_execute.h:92) ==13501==    by 0×824DBEB: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:234) ==13501==    by 0×824D9AC: execute (zend_vm_execute.h:92) ==13501==    by 0×824DBEB: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:234) ==13501==    by 0×824D9AC: execute (zend_vm_execute.h:92) ==13501==    by 0×824DBEB: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:234) ==13501==    by 0×824D9AC: execute (zend_vm_execute.h:92) ==13501==    by 0×824DBEB: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:234) ==13501== ==13501== ==13501== 240 bytes in 15 blocks are definitely lost in loss record 8 of 10 ==13501==    at 0×1B908222: malloc (vg_replace_malloc.c:130) ==13501==    by 0×8257DB2: ZEND_SEND_REF_SPEC_VAR_HANDLER (zend_vm_execute.h:7194) ==13501==    by 0×824D9AC: execute (zend_vm_execute.h:92) ==13501==    by 0×824DBEB: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:234) ==13501==    by 0×824D9AC: execute (zend_vm_execute.h:92) ==13501==    by 0×824DBEB: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:234) ==13501==    by 0×824D9AC: execute (zend_vm_execute.h:92) ==13501==    by 0×824DBEB: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:234) ==13501==    by 0×824D9AC: execute (zend_vm_execute.h:92) ==13501==    by 0×822C075: zend_call_function (zend_execute_API.c:938) ==13501==    by 0×822CF7B: call_user_function_ex (zend_execute_API.c:579) ==13501==    by 0×81A4365: zif_call_user_func_array (basic_functions.c:2158) ==13501== ==13501== ==13501== 261 (16 direct, 245 indirect) bytes in 1 blocks are definitely lost in loss record 9 of 10 ==13501==    at 0×1B908222: malloc (vg_replace_malloc.c:130) ==13501==    by 0×8227C1A: zend_do_fetch_static_variable (zend_compile.c:3380) ==13501==    by 0×8218409: zendparse (zend_language_parser.c:3483) ==13501==    by 0×821B4E0: compile_file (zend_language_scanner.c:3080) ==13501==    by 0×821F5D0: compile_filename (zend_language_scanner.c:3125) ==13501==    by 0×826FF05: ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER (zend_vm_execute.h:19498) ==13501==    by 0×824D9AC: execute (zend_vm_execute.h:92) ==13501==    by 0×822C075: zend_call_function (zend_execute_API.c:938) ==13501==    by 0×822CD24: zend_lookup_class_ex (zend_execute_API.c:1044) ==13501==    by 0×822CE32: zend_fetch_class (zend_execute_API.c:1443) ==13501==    by 0×824E7D0: ZEND_FETCH_CLASS_SPEC_CONST_HANDLER (zend_vm_execute.h:627) ==13501==    by 0×824D9AC: execute (zend_vm_execute.h:92) ==13501== ==13501== LEAK SUMMARY: ==13501==    definitely lost: 400 bytes in 25 blocks. ==13501==    indirectly lost: 245 bytes in 11 blocks. ==13501==      possibly lost: 0 bytes in 0 blocks. ==13501==    still reachable: 826 bytes in 10 blocks. ==13501==         suppressed: 0 bytes in 0 blocks. ==13501== Reachable blocks (those to which a pointer was found) are not shown.

As you can see, PHP is sick, leaking memory all over the place. Joy.

add to del.icio.us    add to technorati favs   email this