Posts mit dem Label ZendDebugger werden angezeigt. Alle Posts anzeigen
Posts mit dem Label ZendDebugger werden angezeigt. Alle Posts anzeigen

Mittwoch, 23. April 2014

HowTo install ZendDebugger for PHP 5.4 or PHP 5.5 on Debian

Since the ZendDebugger is bundled with ZendStudio and ZendServer the PHP module cannot easily be downloaded standalone.

But with some simple steps the module can be extracted out of the official ZendStudio tarball which can be downloaded for free on http://www.zend.com/en/products/studio/downloads.

Prerequisites


Make sure, openssl0.9.8 is installed. Newer Versions like openssl1.0.0+ will not work.

on debian squeeze

$ sudo apt-get install libssl0.9.8

on debian wheezy

$ wget http://snapshot.debian.org/archive/debian/20110406T213352Z/pool/main/o/openssl098/libssl0.9.8_0.9.8o-7_amd64.deb
$ sudo dpkg -i libssl0.9.8_0.9.8o-7_amd64.deb

Extract the extension


Create a temporary working dir

$ mkdir /tmp/zend_debugger
$ cd /tmp/zend_debugger

Download Zend Studio 10.6

$ wget http://downloads.zend.com/studio-eclipse/10.6.0/ZendStudio-10.6.0-linux.gtk.x86_64.tar.gz

Find the extension in the archive

$ tar -tvf ZendStudio-10.6.0-linux.gtk.x86_64.tar.gz | grep ZendDebugger.so
This will give you the following output:
-rwxrwxr-x vagrant/nogroup   238153 2014-01-08 16:11 ZendStudio/plugins/com.zend.php.debug.debugger.linux.x86_64_10.6.0.v20140128-2127/resources/php53/ZendDebugger.so
-rwxrwxr-x vagrant/nogroup   238217 2014-01-08 15:56 ZendStudio/plugins/com.zend.php.debug.debugger.linux.x86_64_10.6.0.v20140128-2127/resources/php54/ZendDebugger.so
-rw-r--r-- vagrant/nogroup   238631 2014-01-08 15:22 ZendStudio/plugins/com.zend.php.debug.debugger.linux.x86_64_10.6.0.v20140128-2127/resources/php55/ZendDebugger.so

Extract the extension for PHP 5.3, 5.4 and 5.5

$ tar -xzvf ZendStudio-10.6.0-linux.gtk.x86_64.tar.gz --strip-components 4 --wildcards *ZendDebugger.so

Install the extension


Now copy the extension matching your PHP Version to the local extension dir

For PHP 5.5

$ sudo cp php55/ZendDebugger.so `php -i | grep extension_dir | awk '{print $NF}'`

For PHP 5.4

sudo cp php54/ZendDebugger.so `php -i | grep extension_dir | awk '{print $NF}'`

Update your php.ini

Add the following lines at the end of your php.ini file
[Zend Debugger]
zend_extension=ZendDebugger.so
zend_debugger.allow_hosts=127.0.0.1/24,192.0.0.1/32
zend_debugger.expose_remotely=allowed_hosts

Check the extension

$ php -v
PHP 5.5.11-1~dotdeb.1 (cli) (built: Apr  4 2014 02:15:16)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
    with Zend Debugger v6.0.0, Copyright (c) 1999-2013, by Zend Technologies

That's it. If you can find the line "Zend Debugger v6.0.0" in the output the debugger extension is successfully installed.

Sonntag, 2. Februar 2014

PHP Segmentation fault

This is the worst case for every php developer when hacking some code - your script runs not as expected and you get a simple message saying "Segmentation fault".

Here are the steps you can do, to track down this error.


Some simple tips to start


- Use a debugger like ZendDebugger or XDebug to find the line of code causing the error.

- Disable PHP's internal garbage collector. The garbage collector is known to often cause segmentation faults. If disabling will help you are probably found an internal reference counting bug in the garbage collector
ini_set('zend.enable_gc', 0);
- Look for recursion in your code. PHP throws a segmentation fault if you have a infinite recursion in your code

- If you have apc installed sometimes it helps to empty the cache or disable the cache

Use strace

If php runs on Linux or Mac OS you can use strace/dtruss to hook into the process and see what's happening. Strace can be installed on Debian by running

apt-get install strace

Run phpunit with strace

$ strace phpunit

Attach strace to a already running process

$ sudo strace -s 256 -p <PID>

Run any php script with strace

$ strace php index.php

Attach strace to a running cgi process

$ ps axf | grep php5-cgi # lists all running processes
#If more than one process is found you can use the tool php-strace (see below) to trace all processes at the same time. If only one process is found you can use the following command to trace:
$ sudo strace -s 256 -p <PID>
#For debugging purposes I recommend to limit the cgi processes running to one, so you can be sure to hook into the right process which is serving your browser.
# The number of running cgi processes can be edited by editing the file /etc/php5/fpm/pool.d/www.conf .

Gdb

Also you can try to run the script inside of gdb. On Debian gdb can be installed using the command "apt-get install gdb"

gdb --args php /usr/bin/phpunit
#inside gdb enter:
set env MALLOC_CHECK_=3
#then enter:
r

php-strace

I wrote a tool for easy monitoring running cgi proccesses on a server or a developer box.

php-strace helps to track down segfaults in running php processes. It starts a new strace instance for every running php5-cgi or php-fpm process to monitor whether a segfault happened.


php-strace

To get started, visit my github page. https://github.com/markus-perl/php-strace

Update

php-strace V0.3 available:
https://dl.dropboxusercontent.com/u/32252351/github/php-strace-0.3.tar.gz