Preamble
Birçokları gibi, benim programları ayıklamak için XDebug kullanarak gelmiş daha xdebug benim IDE bağlantısı ayıklama saat daha geçirdim. I’ve gotten it to work repeatedly, ama her seferinde bir süre ben ortak olsun “Waiting to connect” problem. Ben XDebug çalışmak ya da başarısız olmasına neden ne lokalize etmek mümkün olmamıştır. Ben iki yıldır ubuntu kullanıyorum; Ben noob ne de strace gurusu biri değilim. What am I doing wrong? How can I better debug my IDE’s connection to XDebug?
Setup
- Ubuntu 10.10
- Netbeans 6.9.1
- Suhosin-Patch ile PHP 5.3.3-1ubuntu9
- tailored installation instructions script on xdebug.org kullanarak kaynağından 20 Eylül 2010 yili debugclient ile xdebug v2.1.0
- Apache Apache/2.2.16
- Hem / etc/php5/apache2/php.ini ve / etc/php5/cli/php.ini sahiptir:
zend_extension = /usr/lib/php5/20090626+lfs/xdebug.so xdebug.remote_enable=1 xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_log=/var/log/xdebug.log xdebug.extended_info=1 xdebug.idekey="netbeans-xdebug"
Procedure
The Problem
Ben sorunun ortaya zaman soruna neden ya da ne olduğunu açıklayamam. Ben parametresi ile benim proje url açmak için seçim benim dev tarayıcı (Chrome) neden projemi, hata ayıklamaya çalıştığınızda başlar XDEBUG_SESSION_START=netbeans-xdebug
. Bu Netbeans Yalnızca raporları ise sayfa krom normal hale neden "bağlayın bekliyorum."
Debugging XDebug
İlk olarak, hala hayatta "bağlan bekliyorum" mesajı ile, ben gider, hangi limana yaklaşık 9000 kazmak için netstat kullanmaya çalışacağım something like bu:
$ netstat -an | grep 9000
tcp6 0 0 :::9000 :::* LISTEN
Benim IDE kapatmaya ve üzerinde neler olup bittiğini anlamaya yardımcı olmak için iki dosya kullanmayı deneyin: {webroot}/index.php
<?php phpinfo(); ?>
içerir ve {webroot}/dbgtest.php
içeren {[(3) }]:
<?php
$address = '127.0.0.1';
$port = 9000;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($sock, $address, $port) or die('Unable to bind');
socket_listen($sock);
$client = socket_accept($sock);
echo "connection established: $client";
socket_close($client);
socket_close($sock);
?>
: Ben XDebug debugclient
ve açık http://127.0.0.1/dbgtest.php?XDEBUG_SESSION_START=mysession
, ben genelde regular output ve ardından XDebug başka bir terminal netstat komut bağlı doğrulamak alırsınız başlattığınızda
$ netstat -an | grep 9000
tcp 0 0 127.0.0.1:9000 127.0.0.1:34831 ESTABLISHED
tcp 0 0 127.0.0.1:34831 127.0.0.1:9000 ESTABLISHED
Bu iki bağlantı yapıldığını belirtmek gibi görünüyor olsa da, web sayfası ben açıklayamam ki, "bağlanılamıyor" okur. Ctrl-c debugclient çıkmak için, ve bu noktada netstat liman 9000 aktiviteye sahip olduğunu doğrular. Ben Netbeans, açık {webroot}/index.php
kadar yangın ve http://127.0.0.1/index.php
açılır debugger meşgul. Debugger daha sonra genellikle normal olarak başlar. Ben debugger, geri benim proje gidin durdurun ve sorun gerçekten can sıkıcı olur bu nerede: zaman bazı, ben, normal, ve diğer zamanlarda olarak benim proje ayıklarken devam edebilir, sorun yeniden ortaya ve "Waiting ise işaret, netstat gösterileri görüntüleyen "bağlayın:
$ netstat -an | grep 9000
tcp6 0 0 :::9000 :::* LISTEN
tcp6 0 0 127.0.0.1:9000 127.0.0.1:34681 TIME_WAIT
Diğer zamanlarda, benim bilgisayarı yeniden başlatmanız bir terminali kadar yangın ve bulabilirsiniz:
$ netstat -an | grep 9000
unix 3 [ ] STREAM CONNECTED 9000
$ telnet 127.0.0.1 9000
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
Ben bu işaret ne olduğunu görmek için ağ ve linux internals yeterince aşina değilim. Açıkça something noktasını 9000 kullanıyor. Bu ne demek? Not php.ini benim ayarları rağmen:
$ cat /var/log/xdebug.log
cat: /var/log/xdebug.log: No such file or directory