Php denir webcoder hata ayıklama için en iyi yöntem?

7 Cevap php

Ben bir ön çiftleşmiş tabaka bir arka uç uygulama sunucusu çağrıları dışarı yapar bir n-katmanlı sistemi var. Örneğin, bazı arama sonuçlarını almak gerekiyor ve önyüz sonuçları almak için arka uç çağırır.

Çiftleşmiş motoru ve appserver hem de PHP yazılır. Şu anda http isteği benim debugger sadece oturur ve tamamlamak IO bekler uzaktan hizmet için dışarı gittiğinde, ancak, çiftleşmiş motoru ayıklama oturumları başlatmak için PhpED kullanın.

Ne yapmak istiyorsunuz o zaman benim appserver çevre yük var ve çağrıyı işlemek, HTTP aramayı taklit ama gerçekten sadece benim PHP süreç içinde kalmak, yığının çeşit üzerine çevre dev bir itme yapmak olduğunu. Çağrı yapıldıktan sonra, ben (bir çıkış tampon yoluyla, örneğin) bir env pop yapmak, ve bir var http arama sonuçları almak. I can, aynı sunucu üzerinde hem hizmetleri çalıştırın. Herkes zaten bunu herhangi bir fikir veya kütüphaneler var mı?

7 Cevap

Eğer bir hata ayıklayıcı çalıştırın ve çok appserver bir kesme noktası ayarlamak değil mi? İki farklı hata ayıklama oturumları - yakalamak için bir çiftleşmiş motoru çağrı ve tuzak bir appserver çağrı.

Sen çiftleşmiş motoru hata ayıklama oturumunda appserver gelen çıktıyı izlemek gerekir.

Iki hata ayıklama oturumları çalıştırmak mümkün değilse çiftleşmiş motoru çıkışları yakalayarak appserver için bazı test girişleri oluşturmak ve test appserver girişleri ile tek bir hata ayıklayıcı kullanabilirsiniz.

Bu utanç verici ham ve debugger nasıl çalıştığını herhangi bir çalışmanın oldukça ücretsiz, ancak ekleyerek denedim

    debugBreak();

Lütfen denilen rutin giriş noktalarında? (Aynı makinede çalışan iki süreçleri varsayarsak).

Ben AMFPHP yoluyla denilen bir süreç içine tekrar kırmak için bu tekniği kullandık. Daha sonra aynı sunucuda AMFPHP, tüm kullanarak geri PHP aramaları, tarayıcınıza bir PHP dosyası yükleme Flash dosyası vardı. Ben DebugBreak () çizgi vurduğunda, PhpED kontrol kavuşur.

Neden bir HTTP dinleyicisi kullanmak değil mi? Tcpflow gibi bir şey.

Alternatif olarak, sadece her istek için bir dosya için tam XML log & olabilir yanıtı.

Ne yazık ki bu yüzden bu sadece tahmin sen başarmak için çalışıyoruz ne sorunuza net değil. Muhtemelen daha net tam olarak çözmek için çalışıyoruz ne sorun belirtilmelidir.

Muhtemelen yeniden faktör kaldır hizmet için dışarı çağırır kodu ve bağımlılık enjeksiyon ve mocks kullanabilirsiniz. Yani "alay" ama geçerli veri suppling arka ön uç gelişimini izole etmek için izin verecek.

Umut olur.

Ben PHP parçacığı eksikliği bahsediyoruz varsayalım, bu nedenle servis programın akışını durdurur ve hata ayıklayıcı durdurur miyim? Orada etrafında yolu var, ama onlar, sert hantal ve hackish vardır.

Eğer HTTP trafiği için Zend gibi bir çerçeve kullanmak Örneğin, HTTP sınıf yerleşik şeyler yerine yazma / okuma hizmeti için ilkel yuvalarını kullanmak için kesmek, ve küçük bir görev switcher (döngü :) oluşturabilirsiniz neler oluyor izleyebilirsiniz.

Sen ders kullanımı Fopen de ('http:// ...') ve bir döngü içinde topakları fread arasında bu hile yapabilir, ama sen akarsularda http:support ihtiyaç döndü.

Ben PHP debugging hakkında çok şey bilmiyorum, ve ben 'destenin çeşit üzerine çevre push' takip emin değilim, ama netcat + bazı kabuk komut dosyası için buraya yararlı olabilir acaba troubleshooting?

: Eğer Netcat'i kullanabilirsiniz

  • Spoof an HTTP Request
  • Act like a webserver (listen on a port - pick a port, any port!)

http://www.plenz.com/netcat-tips

Sen bir ucunda sahte webcoder saplama için kullanabilirsiniz:

echo "<xml .. <node>hello php!</node>" | netcat -lp 80 ... etc

... Ve kesinlikle çok net webcoder gelen istekleri neye benzediğini görmek için bir bağlantı noktası üzerinde dinleme kullanabilirsiniz.

Eğer webservice gibi davranan orta adam gibi netcat ile bir kabuk kullanabilirsiniz, hemen PHP mutlu etmek için genel bir şey döner, sonra gerçek appserver için istek geçirir ve sonuçlarını kaydeder?

Süper basit.

netcat webserver

Bu açık kaynak değil, ama Charles check out. Bu bir proxy olarak çalışır, ve ben bugüne kadar gördüğüm en iyi hata ayıklama proxy. Bu linux, os / x ve windows üzerinde çalışır.

Hemen hemen herhangi bir HTTP kütüphanesi bir proxy belirtmek sağlayacak.

PhpED supports parallel debug sessions - meaning you can start debugging code that issues request to initial server and then inter-server requests too. All you need is to set breakpoints in corresponding projects and pass debugger request between the servers. Normally you can do this by re-transmitting value of DBGSESSID (the debugger request) variable with its value to the 2nd server. The variable can be found among $_COOKIES and/or $_GET (depending on how you start debugging -- from the IDE or usign Debugger Toolbar). To re-transmit the variable to the secondary server(s) you can add it to POST variables or as URL parameter or cookie. If you can't do that f.e. if your server filters out all from get/post/cookies, try to embed DebugBreak() call. Make sure that all your servers can find the IDE by its IP address in the request and allowed to connect back to the IDE -- e.g. you have necessary rules in firewall and LinuxSE (buy default this SE layer is enabled in all modern Linuxes these days). It took me a day to figure out why my server can't connect.

Durumda IDE sunucudan bağlantısı (IDE ile iş istasyonu örneğin evde farklı bir ağ, ise), kullanabileceğiniz olası değilse ssh tunnels. Bu durumda IDE adres tabii ki, localhost.