जाँच करें कि क्या xdebug काम कर रहा है


87

टेक्‍सीडिटर या आईडीई को इंस्‍टॉल किए बिना, क्‍या टेडीबग काम कर रहा है, यानी यदि यह फीगर कोड डिबग कर सकता है तो परीक्षण करना संभव है?

केवल हिस्सा xdebug phpinfo में आता है () निम्नलिखित है:

अतिरिक्त .ini फ़ाइलें पार्स / /cc/php5/apache2/conf.d/mysql.ini, /etc/php5/apache2/conf.d/mysqli.ini, /etc -php5/apache2/conf.d/pdo.ini, /etc/php5/apache2/conf.d/pdo_mysql.ini, /etc/php5/apache2/conf.d/xdebug.ini

इसका जिक्र फपिंफो () कहीं और नहीं है।


7
क्या phpinfo()इसे लोडेड एक्सटेंशन के रूप में रिपोर्ट करता है ? क्या "काम" से आपका मतलब है?
वाइजग्यू

2
यदि यह आपके phpinfo () पर दिखाई दे रहा है तो आप Xdebugs port (जो कि डिफ़ॉल्ट रूप से 9000 है) पर टेलनेट करने की कोशिश कर सकते हैं
tix3

@ वाइजगू, मैंने सवाल अपडेट किया है। इसका मतलब है कि यह लोड / ठीक से काम कर रहा है?
२६:१२ पर oshoshirowanen

@ tix3, मैंने सवाल अपडेट किया है। इसका मतलब है कि यह लोड / ठीक से काम कर रहा है?
२६:१२ पर oshoshirowanen

2
यदि एक्सटेंशन वास्तव में लोड है, तो इसका अपना खंड होना चाहिए जो इसके कॉन्फ़िगरेशन निर्देशों को सूचीबद्ध करता है।
वाइजग्यू

जवाबों:


94

वास्तव में कुछ डिबगिंग किए बिना, मुझे लगता है कि आप निश्चित नहीं हो सकते कि एक डिबगर काम कर रहा है।

लेकिन आप निश्चित रूप से आश्वस्त हो सकते हैं - मुझे लगता है कि किसी को यह मानना ​​चाहिए कि अगर xDebug के कुछ पहलू काम कर रहे हैं तो यह सब काम कर जाएगा।

यह देखते हुए, आप पुष्टि कर सकते हैं कि xDebug स्थापित है और निम्नलिखित की कोशिश करके जगह में है:

1) phpinfo()- यह आपको एक्सडबग सहित लोड किए गए सभी एक्सटेंशन दिखाएगा। यदि यह वहां है, तो यह एक सुरक्षित शर्त है कि यह काम कर रहा है।

2) यदि यह आपके लिए पर्याप्त नहीं है, तो आप var_dump()फ़ंक्शन का उपयोग करके देख सकते हैं । var_dump()अतिरिक्त जानकारी को शामिल करने के लिए xDebug आउटपुट को संशोधित करता है । यदि यह जगह में है, तो xDebug काम कर रहा है।

3) xDebug PHP की त्रुटि आउटपुट को संशोधित करता है। यदि आपका प्रोग्राम xDebug के साथ क्रैश होता है, तो आपको मानक PHP क्रैश आउटपुट की तुलना में विफलता के बारे में अधिक जानकारी मिलेगी।

4) xDebug में PHP में कई हेल्पर फ़ंक्शंस भी जोड़े जाते हैं। आप इनमें से किसी को भी देखने की कोशिश कर सकते हैं कि क्या यह काम कर रहा है। उदाहरण के लिए, फ़ंक्शन xdebug_get_code_coverage()मौजूद होना चाहिए और एक सरणी वापस करना चाहिए। यदि यह करता है, तो xDebug स्थापित है। यदि नहीं, तो यह नहीं है।


1
phpinfo () में केवल xdebug का उल्लेख है Additional .ini files parsed। अब अपने बाकी सुझावों की जाँच कर रहा है।
२६:१२ पर oshoshirowanen

3
बस कोशिश की xdebug_get_code_coverage()और मुझे मिल गया Fatal error: Call to undefined function xdebug_get_code_coverage() in /var/www/xdebug.php on line 5
oshirowanen

7
काफी उचित। यह काफी निर्णायक रूप से आपको बताता है कि xdebug सही तरीके से स्थापित नहीं है।
स्पडली

3
बस एक FYI करें अगर ऐसा है तो आपको अपनी /etc/php/conf.d/xdebug.iniफाइल को खोलना चाहिए , जो कि अतिरिक्त .ini फाइलों में बताई गई है, और इसमें मौजूद सभी लाइनों को अनकम्फर्टेबल किया गया है। zend_extension=xdebug.so xdebug.remote_enable=on xdebug.remote_host=127.0.0.1 xdebug.remote_port=9000 xdebug.remote_handler=dbgp
टोनी मोरेलो

@TonyMorello मुझे लगता है कि इससे मुझे मदद मिली, क्योंकि मेरे php.ini को पूरे रास्ते से सही तरीके से सेटअप किया गया था, लेकिन डेबियन में भी एक /mods-availableनिर्देशिका है और xdebug.ini सेटिंग मेरे php.ini सेटिंग के साथ संघर्ष (मुझे लगता है) में थी।
पीजे ब्रुनेट

67

Daud

php -m -c

अपने टर्मिनल में, और फिर के लिए देखो [Zend Modules]। लोड होने पर यह कहीं होना चाहिए!

नायब

आप उबंटू का उपयोग कर रहे हैं, यह नहीं यहां क्योंकि आप से xdebug सेटिंग्स जोड़ने की जरूरत है दिखा सकते हैं /etc/php5/apache2/php.iniमें /etc/php5/cli/php.ini। मेरा है

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000

17
php --versionभी Xdebug के साथ सूची अगर इसके भरी हुई
mfink

1
@mfink php --versionमेरे लिए काम नहीं करता है। मेरी मशीन शुरू करने के बाद, अपाचे शुरू करने और काम करने के बाद, php --versionXdebug दिखाता है, लेकिन phpinfo()xdebug अनुभाग नहीं दिखाता है। और PHP स्क्रिप्ट निष्पादन ब्रेकपॉइंट पर नहीं रुकता है। मेरे चलाने के बाद service apache2 restart, phpinfo()xdebug अनुभाग और डिबगिंग कार्यों को दिखाता है। इसलिए, किसी कारण से, मशीन बूट-अप के दौरान Apache शुरू होने पर xdebug लोड नहीं हो रहा है। इसलिए अब मैं अपाचे को हर बूट के बाद रिस्टार्ट करने वाला हूं।
बुटिक बटुक

37

निम्नलिखित के रूप में प्रयास करें, "अस्तित्व में" या "गैर मौजूद" होना चाहिए:

<?php
echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';

25

लगभग 24 घंटे की लंबी दौड़ के बाद, नेटबिन्स 8.0.2 के साथ काम करने के लिए xdebug बनाने की कोशिश कर रहा है, मुझे एक समाधान मिल गया है, मुझे आशा है कि, सभी Ubuntu और Ubuntu संबंधित ढेर के लिए काम करेंगे।

समस्या संख्या 1: PHP और xdebug संस्करण संगत होने चाहिए

कभी-कभी, यदि आप लिनक्स सेटअप चला रहे हैं और xdebug स्थापित करने के लिए उपयुक्त नहीं हैं, तो यह आपको उचित xdebug संस्करण नहीं मिलेगा। मेरे मामले में, मेरे पास नवीनतम php संस्करण लेकिन एक पुराना xdebug संस्करण था। यह मेरे वर्तमान ज़ुबांटू संस्करण के कारण होना चाहिए। सॉफ्टवेयर संस्करण रिपॉजिटरी पर निर्भर हैं, जो आपके द्वारा चलाए जा रहे ओएस संस्करण पर निर्भर हैं।

समाधान: PHP में PECL नामक एक साफ विस्तार प्रबंधक है। इसे दिए और चलाने के लिए यहां दिए गए निर्देशों का पालन करें । सबसे पहले, जैसा कि टिप्पणियों में एक सदस्य द्वारा बताया गया है, आपको PECL को काम करने के लिए PHP के डेवलपर पैकेज को स्थापित करना चाहिए:

sudo apt-get install php5-dev

फिर, PECL का उपयोग करके, आप xdebug के नवीनतम स्थिर संस्करण को स्थापित करने में सक्षम होंगे:

sudo pecl install php5-xdebug

एक बार जब आप इसे कर लेते हैं, तो xdebug का उचित संस्करण इंस्टॉल हो जाएगा लेकिन उपयोग करने के लिए तैयार नहीं है। उसके बाद, आपको इसे सक्षम करना होगा। मैंने इसे करने के बारे में कई सुझाव देखे हैं, लेकिन इस तथ्य की सच्चाई यह है कि इस मामले में Apache क्लाइंट और सर्वर दोनों के लिए सक्षम होने के लिए कुछ मॉड्यूल की आवश्यकता होती है। ऐसा लगता है कि यहाँ का सबसे अच्छा अभ्यास है, मॉड्यूल को सक्षम करने की विधि का उपयोग करना, जिसे php5enmod कहा जाता है। उपयोग यहाँ वर्णित है

समस्या संख्या 2: मॉड्यूल को सही ढंग से सक्षम करें

सबसे पहले, आपको / etc / php5 फ़ोल्डर के अंदर जाना होगा। वहाँ, आपको 3 फ़ोल्डर मिलेंगे, Apache2, cli, और mods_available। Mods_available फ़ोल्डर में दिए गए मॉड्यूल को सक्रिय करने के निर्देशों के साथ पाठ फ़ाइलें हैं। नाम सम्मेलन [मॉड्यूल] .ini है। उनमें से कुछ के अंदर एक नज़र डालें, देखें कि उन्हें कैसे स्थापित किया जाता है।

अब आपको mods_available फ़ोल्डर के अंदर अपनी ini फाइल बनानी होगी। Xdebug.ini नामक एक फ़ाइल बनाएँ, और फ़ाइल के अंदर, इसे पेस्ट करें:

[xdebug]
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000

सुनिश्चित करें कि निर्देश [xdebug] मौजूद है, बिल्कुल ऊपर के उदाहरण की तरह। मॉड्यूल के काम करने के लिए यह जरूरी है। वास्तव में, बस पूरे कोड को कॉपी और पेस्ट करें, आप इस तरह से एक खुशहाल व्यक्ति होंगे। : डी

नोट: zend_extension पाथ बहुत महत्वपूर्ण है। इस उदाहरण पर यह PHP इंजन के वर्तमान संस्करण को इंगित कर रहा है, लेकिन आपको पहले / usr / lib / php5 पर जाना चाहिए और यह सुनिश्चित करना चाहिए कि संख्याओं के साथ नामित फ़ोल्डर सही है। जो भी आप वहां देखते हैं उसका नाम समायोजित करें, और जब आप उस पर हों, तो xdebug.so वास्तव में वहाँ है यह सुनिश्चित करने के लिए फ़ोल्डर के अंदर जांचें। यह होना चाहिए, अगर आपने सब कुछ ठीक किया।

अब, आपके xdebug.ini के साथ, यह मॉड्यूल को सक्षम करने का समय है। ऐसा करने के लिए, एक कंसोल खोलें और टाइप करें:

php5enmod xdebug

यदि सब कुछ सही हो जाता है, तो PHP ने इस फ़ाइल के दो लिंक बनाए हैं, एक /etc/php5/apache2/conf.d के अंदर और दूसरा /etc/php5/cli/conf.d के अंदर।

अपने Apache सर्वर को पुनरारंभ करें और इसे कंसोल पर टाइप करें:

php -v

आपको कुछ इस तरह से मिलना चाहिए:

PHP 5.5.9-1ubuntu4.6 (cli) (built: Feb 13 2015 19:17:11) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.3.1, Copyright (c) 2002-2015, by Derick Rethans

जिसका अर्थ है कि PHP क्लाइंट ने आपकी xdebug.ini फ़ाइल पढ़ी और xdebug.so मॉड्यूल लोड किया। अब तक सब ठीक है।

अब अपने वेब सर्वर पर कहीं एक phpinfo स्क्रिप्ट बनाएं, और इसे चलाएं। यह वही है जो आपको देखना चाहिए, अगर सब कुछ राइट हो गया:

यहाँ छवि विवरण दर्ज करें

यदि आप यह देखते हैं, तो अपाचे ने भी मॉड्यूल लोड किया है, और आप शायद जाने के लिए तैयार हैं। अब देखते हैं कि क्या नेटबीन्स सही तरीके से डेब्यू करेंगे। एक बहुत ही सरल स्क्रिप्ट बनाएं, कुछ चर जोड़ें, उन्हें मान दें, और उन पर एक विराम बिंदु सेट करें। अब CTRL + F5 को हिट करें, अपने डीबगर पैनल पर "स्टेप इन" पर क्लिक करें, और देखें कि क्या आपको ऐसा कुछ मिलता है:

कार्रवाई में xdebug

उपकरण / विकल्प / php के तहत डिबगिंग के लिए Netbeans कॉन्फ़िगरेशन की जांच करना याद रखें। यह कुछ इस तरह दिखना चाहिए:

नेटबीन्स पर डिबगिंग कॉन्फ़िगरेशन

मुझे आशा है कि यह इस पर कुछ प्रकाश डालता है बल्कि अस्पष्ट, भ्रामक समस्या है।

शुभकामनाएँ!


2
मेरे लिए काम किया, यह जवाब शायद xdebug या netbeans साइट पर होना चाहिए
southerton

1
मुझे PECL को काम करने के लिए PHP के डेवलपर पैकेज को स्थापित करना था sudo apt-get install php5-dev:।
तक

इसके अलावा, php5enmodini फ़ाइलों में कोई लिंक नहीं बनाता है, यह बिना बड़े करीने से काम करता है।
तक

1
एक और बात: [xdebug]यह काम करने के लिए ini फ़ाइल का निर्देश महत्वपूर्ण है। मैं इस तथ्य से भ्रमित था कि, मूल ini फ़ाइल में, [xdebug]गायब था, लेकिन मेरे लिए यह बिना काम नहीं करता था।
तक

नमस्कार! आप PHP के डेवलपर पैकेज को स्थापित करने के बारे में सही हैं, मैं पोस्ट को तदनुसार अपडेट करूंगा। Php5enmod तू पर अपनी टिप्पणी के बारे में निश्चित नहीं है। यह मेरे द्वारा निर्दिष्ट फ़ोल्डरों पर लिंक बनाता है। और हां, [xdebug] निर्देश अनिवार्य है, मैं पोस्ट को अपडेट करूंगा कि वह भी प्रतिबिंबित हो। प्रतिक्रिया के लिए धन्यवाद!
थियो टी। कैरान्ज़ा

10

KsaR के उत्तर का विस्तार करने और कमांड लाइन से xdebug की जांच करने की संभावना प्रदान करने के लिए:

php -r "echo (extension_loaded('xdebug') ? '' : 'non '), 'exists';"

6

आप इस छोटे से phpकोड को चला सकते हैं

<?php
phpinfo();
?>

पूरे आउटपुट पेज को कॉपी करें, इस लिंक में पेस्ट करें । फिर विश्लेषण करें। यह दिखाएगा कि क्या Xdebug स्थापित है या नहीं। और यह स्थापना को पूरा करने के लिए निर्देश देगा।


3

यदि आप ग्रहण का उपयोग कर रहे हैं, तो कृपया ध्यान दें कि XDebug मोड पर चलने के दौरान मैजिक स्थिरांक __FILE__ को हमेशा के लिए छोड़ दिया जाएगा:

xdebug://debug-eval

यदि आपका सत्र XDebug के अंतर्गत है, तो निम्नलिखित चेक सही वापस आएगा :

$is_xdebug = false !== strpos(__FILE__,'xdebug'); // true while on XDebug

2

अपने प्रश्न में आपने उल्लेख किया है कि आपका phpinfo यह बता रहा था कि Apache /etc/php5/apache2/conf.d/xdebug.ini में xdebug का कॉन्फ़िगरेशन लोड कर रहा है। ऑनलाइन कई निर्देशों में आप ध्यान दें कि वे आपसे phd में xdebug कॉन्फिगर करने के लिए कह सकते हैं। .ini (और मैंने जो किया है), यदि कॉन्फ़िगरेशन /etc/php5/apache2/conf.d/xdebug.ini पर सेट है, तो आपको [XDebug] कॉन्फ़िगरेशन सेटिंग्स / etc / php5 / apache2 को हटा देना चाहिए /php.ini और इसे /etc/php5/apache2/conf.d/xdebug.ini INSTEAD में डालें। एक बार मैंने /etc/php5/apache2/php.ini से निकाल दिया और इसके बजाय /etc/php5/apache2/conf.d/xdebug.ini में डाल दिया और अपाचे को फिर से शुरू कर दिया, यह काम किया !!

इसलिए, अपने /etc/php5/apache2/conf.d/xdebug.ini में, निम्नलिखित डालें:

[XDebug]
zend_extension="/usr/lib/php5/20121212+lfs/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port="9000"
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/home/paul/tmp"

xdebug.remote_host="localhost"
xdebug.remote_handler="dbgp";
xdebug.idekey="phpstorm_xdebug"

इसके बाद इसे /etc/php5/apache2/php.ini से हटा दें यदि आप इसे वहां भी रखते हैं।

फिर करो:

sudo service apache2 पुनरारंभ

तो फिर यह काम करना चाहिए !!!


0

Xdebug 3 से शुरू करके आप निम्न कमांड लाइन का उपयोग कर सकते हैं:

php -r "xdebug_info();"

और यह आपके xdebug स्थापना के बारे में उपयोगी जानकारी प्रदर्शित करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.