SAPI मॉड्यूल के रूप में लागू किया गया इंटरएक्टिव स्टेपथ PHP PHP डिबगर जो आपके कोड की कार्यक्षमता या प्रदर्शन को प्रभावित किए बिना आपको पर्यावरण पर पूर्ण नियंत्रण दे सकता है। यह PHP 5.4+ के लिए डिबगिंग प्लेटफॉर्म का उपयोग करने के लिए एक हल्का, शक्तिशाली, आसान होने का लक्ष्य रखता है और इसे PHP 5.6 के साथ आउट-ऑफ-बॉक्स भेज दिया जाता है।
सुविधाओं में शामिल हैं:
- स्टेपथ्रू डिबगिंग
- लचीले ब्रेकपॉइंट (क्लास मेथड, फंक्शन, फाइल: लाइन, एड्रेस, ओपकोड)
- अंतर्निहित eval () के साथ PHP तक आसान पहुँच
- वर्तमान में निष्पादन कोड के लिए आसान पहुँच
- यूजरलैंड एपीआई
- SAPI अज्ञेय - आसानी से एकीकृत
- PHP कॉन्फ़िगरेशन फ़ाइल समर्थन
- JIT सुपर ग्लोबल्स - अपना खुद का सेट करें !!
- वैकल्पिक रीडलाइन समर्थन - आरामदायक टर्मिनल ऑपरेशन
- दूरस्थ डिबगिंग समर्थन - बंडल किए गए जावा GUI
- आसान कामकाज
स्क्रीनशॉट देखें:
मुख पृष्ठ: http://phpdbg.com/
PHP त्रुटि - PHP के लिए बेहतर त्रुटि रिपोर्टिंग
अपनी PHP स्क्रिप्ट को डीबग करने के लिए लाइब्रेरी (वास्तव में एक फ़ाइल) का उपयोग करना बहुत आसान है।
केवल एक चीज जो आपको करने की ज़रूरत है, वह है नीचे के रूप में एक फ़ाइल को शामिल करना (अपने कोड पर शुरुआत में):
require('php_error.php');
\php_error\reportErrors();
तब सभी त्रुटियां आपको जानकारी प्रदान करेंगी जैसे कि बैकट्रेस, कोड संदर्भ, फ़ंक्शन तर्क, सर्वर चर, आदि। उदाहरण के लिए:
विशेषताओं में शामिल:
- तुच्छ उपयोग करने के लिए, यह सिर्फ एक फ़ाइल है
- सामान्य और ajaxy अनुरोधों के लिए ब्राउज़र में प्रदर्शित त्रुटियाँ
- AJAX अनुरोधों को रोक दिया जाता है, जिससे आप उन्हें स्वचालित रूप से पुनः चला सकते हैं
- यथासंभव गलतियाँ करता है (कोड गुणवत्ता को प्रोत्साहित करता है, और प्रदर्शन में सुधार करता है)
- पूरे स्टैक ट्रेस में कोड स्निपेट
- अधिक जानकारी प्रदान करता है (जैसे पूर्ण फ़ंक्शन हस्ताक्षर)
- कुछ त्रुटि संदेशों को ठीक करता है जो केवल सीधे गलत हैं
- वाक्य - विन्यास पर प्रकाश डालना
- सुंदर लग रहा है!
- अनुकूलन
- इसे मैन्युअल रूप से चालू और बंद करें
- त्रुटि रिपोर्टिंग के बिना विशिष्ट अनुभाग चलाएं
- अपने स्टैक ट्रेस में हाइलाइटिंग कोड से बचने की अनुमति देने वाली फ़ाइलों को अनदेखा करें
- आवेदन फाइलें; जब कोई त्रुटि होती है तो इन्हें प्राथमिकता दी जाती है!
मुख पृष्ठ: http://phperror.net/
GitHub: https://github.com/JosephLenton/PHP-Error
मेरा कांटा (अतिरिक्त सुधार के साथ): https://github.com/kenorb-contrib/PHP-Error
यदि आपका सिस्टम DTrace डायनेमिक ट्रेसिंग (OS X पर डिफ़ॉल्ट रूप से स्थापित) का समर्थन करता है और आपके PHP को सक्षम किए गए DTTB (संभावित --enable-dtrace
) के साथ संकलित किया गया है, जो कि डिफ़ॉल्ट रूप से होना चाहिए, तो यह कमांड बिना समय के साथ PHP स्क्रिप्ट को डीबग करने में आपकी मदद कर सकता है:
sudo dtrace -qn 'php*:::function-entry { printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }'
इसलिए दिए गए उपनामों को आपकी आरसी फाइलों (जैसे ~/.bashrc
, ~/.bash_aliases
) में जोड़ा गया है :
alias trace-php='sudo dtrace -qn "php*:::function-entry { printf(\"%Y: PHP function-entry:\t%s%s%s() in %s:%d\n\", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2); }"'
आप आसानी से उर्फ को याद करने के साथ अपनी स्क्रिप्ट का पता लगा सकते हैं trace-php
:।
यहां अधिक उन्नत dtrace स्क्रिप्ट है, बस इसे सहेजें dtruss-php.d
, इसे निष्पादन योग्य बनाएं ( chmod +x dtruss-php.d
) और चलाएँ:
#!/usr/sbin/dtrace -Zs
# See: https://github.com/kenorb/dtruss-lamp/blob/master/dtruss-php.d
#pragma D option quiet
php*:::compile-file-entry
{
printf("%Y: PHP compile-file-entry:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1));
}
php*:::compile-file-return
{
printf("%Y: PHP compile-file-return:\t%s (%s)\n", walltimestamp, basename(copyinstr(arg0)), basename(copyinstr(arg1)));
}
php*:::error
{
printf("%Y: PHP error message:\t%s in %s:%d\n", walltimestamp, copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::exception-caught
{
printf("%Y: PHP exception-caught:\t%s\n", walltimestamp, copyinstr(arg0));
}
php*:::exception-thrown
{
printf("%Y: PHP exception-thrown:\t%s\n", walltimestamp, copyinstr(arg0));
}
php*:::execute-entry
{
printf("%Y: PHP execute-entry:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}
php*:::execute-return
{
printf("%Y: PHP execute-return:\t%s:%d\n", walltimestamp, basename(copyinstr(arg0)), (int)arg1);
}
php*:::function-entry
{
printf("%Y: PHP function-entry:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::function-return
{
printf("%Y: PHP function-return:\t%s%s%s() in %s:%d\n", walltimestamp, copyinstr(arg3), copyinstr(arg4), copyinstr(arg0), basename(copyinstr(arg1)), (int)arg2);
}
php*:::request-shutdown
{
printf("%Y: PHP request-shutdown:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}
php*:::request-startup
{
printf("%Y, PHP request-startup:\t%s at %s via %s\n", walltimestamp, basename(copyinstr(arg0)), copyinstr(arg1), copyinstr(arg2));
}
मुख पृष्ठ: GitHub पर dtruss-lamp
यहाँ सरल उपयोग है:
- चलाएँ:
sudo dtruss-php.d
।
- एक और टर्मिनल रन पर
php -r "phpinfo();"
:।
परीक्षण करने के लिए, आप किसी भी डॉक्टर के पास जा सकते हैं index.php
और इसके द्वारा PHP अंतर्निहित सर्वर चला सकते हैं :
php -S localhost:8080
उसके बाद आप http: // localhost: 8080 / पर साइट तक पहुँच सकते हैं (या जो भी पोर्ट आपके लिए सुविधाजनक हो उसे चुनें) । ट्रेस आउटपुट देखने के लिए कुछ पृष्ठों तक पहुँच से।
नोट: Dtrace डिफ़ॉल्ट रूप से OS X पर उपलब्ध है, लिनक्स पर आपको शायद dtrace4linux की जरूरत है या कुछ अन्य विकल्पों की जाँच करें ।
देखें: php.net पर PHP और DTrace का उपयोग करना
SystemTap SDT डेवलपमेंट पैकेज (उदा yum install systemtap-sdt-devel
) ।
यहाँ उदाहरण स्क्रिप्ट ( all_probes.stp
) SystemTap के साथ चल रहे PHP स्क्रिप्ट की अवधि के दौरान सभी कोर PHP स्थिर जांच बिंदुओं को ट्रेस करने के लिए है:
probe process("sapi/cli/php").provider("php").mark("compile__file__entry") {
printf("Probe compile__file__entry\n");
printf(" compile_file %s\n", user_string($arg1));
printf(" compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("compile__file__return") {
printf("Probe compile__file__return\n");
printf(" compile_file %s\n", user_string($arg1));
printf(" compile_file_translated %s\n", user_string($arg2));
}
probe process("sapi/cli/php").provider("php").mark("error") {
printf("Probe error\n");
printf(" errormsg %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
}
probe process("sapi/cli/php").provider("php").mark("exception__caught") {
printf("Probe exception__caught\n");
printf(" classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("exception__thrown") {
printf("Probe exception__thrown\n");
printf(" classname %s\n", user_string($arg1));
}
probe process("sapi/cli/php").provider("php").mark("execute__entry") {
printf("Probe execute__entry\n");
printf(" request_file %s\n", user_string($arg1));
printf(" lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("execute__return") {
printf("Probe execute__return\n");
printf(" request_file %s\n", user_string($arg1));
printf(" lineno %d\n", $arg2);
}
probe process("sapi/cli/php").provider("php").mark("function__entry") {
printf("Probe function__entry\n");
printf(" function_name %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
printf(" classname %s\n", user_string($arg4));
printf(" scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("function__return") {
printf("Probe function__return: %s\n", user_string($arg1));
printf(" function_name %s\n", user_string($arg1));
printf(" request_file %s\n", user_string($arg2));
printf(" lineno %d\n", $arg3);
printf(" classname %s\n", user_string($arg4));
printf(" scope %s\n", user_string($arg5));
}
probe process("sapi/cli/php").provider("php").mark("request__shutdown") {
printf("Probe request__shutdown\n");
printf(" file %s\n", user_string($arg1));
printf(" request_uri %s\n", user_string($arg2));
printf(" request_method %s\n", user_string($arg3));
}
probe process("sapi/cli/php").provider("php").mark("request__startup") {
printf("Probe request__startup\n");
printf(" file %s\n", user_string($arg1));
printf(" request_uri %s\n", user_string($arg2));
printf(" request_method %s\n", user_string($arg3));
}
उपयोग:
stap -c 'sapi/cli/php test.php' all_probes.stp
देखें: php.net पर PHP DTrace Static Probes के साथ SystemTap का उपयोग करना