title: Using valgrind to debug a PHP cli segmentation fault
body: <p>I have a third-party <code>PHP</code> script that I am running in the <code>cli</code> and it is throwing a <code>segmentation fault</code>, which I am trying now to debug.</p>
  
  <p>Just learned about the <code>valgrind</code> tool, but most of the guides I can find seem to be for <code>PHP</code> running in <code>Apache</code>, not the <code>cli</code>.</p>
  
  <p>How can I use <code>valgrind</code> to debug my <code>cli</code> script and figure out what is causing this <code>segmentation fault</code>?</p>
  
  <p><strong>EDIT:</strong></p>
  
  <p>Using help from @sudowned it gave me the following, but not sure what it is telling me:</p>
  
  <pre><code>==32363== Invalid read of size 8
  ==32363==    at 0x6A459A: _zend_mm_alloc_canary_int (in /usr/bin/php5)
  ==32363==    by 0x6A4CFD: _zend_mm_realloc_canary_int (in /usr/bin/php5)
  ==32363==    by 0x690CC3: zend_hash_do_resize (in /usr/bin/php5)
  ==32363==    by 0x6925C7: _zend_hash_add_or_update (in /usr/bin/php5)
  ==32363==    by 0x68EA1F: add_assoc_zval_ex (in /usr/bin/php5)
  ==32363==    by 0x69729D: zif_get_defined_constants (in /usr/bin/php5)
  ==32363==    by 0xE393B63: ??? (in /usr/lib/php5/20090626/suhosin.so)
  ==32363==    by 0x6D4B15: zend_do_fcall_common_helper_SPEC (in /usr/bin/php5)
  ==32363==    by 0x6ABD8F: execute (in /usr/bin/php5)
  ==32363==    by 0xE394115: ??? (in /usr/lib/php5/20090626/suhosin.so)
  ==32363==    by 0x6D4805: zend_do_fcall_common_helper_SPEC (in /usr/bin/php5)
  ==32363==    by 0x6ABD8F: execute (in /usr/bin/php5)
  ==32363==  Address 0x1c486147 is not stack'd, malloc'd or (recently) free'd
  ==32363== 
  ==32363== 
  ==32363== Process terminating with default action of signal 11 (SIGSEGV)
  ==32363==  Access not within mapped region at address 0x1C486147
  ==32363==    at 0x6A459A: _zend_mm_alloc_canary_int (in /usr/bin/php5)
  ==32363==    by 0x6A4CFD: _zend_mm_realloc_canary_int (in /usr/bin/php5)
  ==32363==    by 0x690CC3: zend_hash_do_resize (in /usr/bin/php5)
  ==32363==    by 0x6925C7: _zend_hash_add_or_update (in /usr/bin/php5)
  ==32363==    by 0x68EA1F: add_assoc_zval_ex (in /usr/bin/php5)
  ==32363==    by 0x69729D: zif_get_defined_constants (in /usr/bin/php5)
  ==32363==    by 0xE393B63: ??? (in /usr/lib/php5/20090626/suhosin.so)
  ==32363==    by 0x6D4B15: zend_do_fcall_common_helper_SPEC (in /usr/bin/php5)
  ==32363==    by 0x6ABD8F: execute (in /usr/bin/php5)
  ==32363==    by 0xE394115: ??? (in /usr/lib/php5/20090626/suhosin.so)
  ==32363==    by 0x6D4805: zend_do_fcall_common_helper_SPEC (in /usr/bin/php5)
  ==32363==    by 0x6ABD8F: execute (in /usr/bin/php5)
  ==32363==  If you believe this happened as a result of a stack
  ==32363==  overflow in your program's main thread (unlikely but
  ==32363==  possible), you can try to increase the size of the
  ==32363==  main thread stack using the --main-stacksize= flag.
  ==32363==  The main thread stack size used in this run was 8388608.
  ==32363== 
  ==32363== HEAP SUMMARY:
  ==32363==     in use at exit: 180,903,362 bytes in 27,691 blocks
  ==32363==   total heap usage: 11,144,829 allocs, 11,117,138 frees, 2,198,841,176 bytes allocated
  ==32363== 
  ==32363== LEAK SUMMARY:
  ==32363==    definitely lost: 0 bytes in 0 blocks
  ==32363==    indirectly lost: 0 bytes in 0 blocks
  ==32363==      possibly lost: 0 bytes in 0 blocks
  ==32363==    still reachable: 180,903,362 bytes in 27,691 blocks
  ==32363==         suppressed: 0 bytes in 0 blocks
  ==32363== Reachable blocks (those to which a pointer was found) are not shown.
  ==32363== To see them, rerun with: --leak-check=full --show-reachable=yes
  ==32363== 
  ==32363== For counts of detected and suppressed errors, rerun with: -v
  ==32363== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 37 from 10)
  </code></pre>