2013-04-22 12 views
12

के साथ नहीं मारा मैं बहुत हताश और विचारों से बाहर चल रहा हूँ:ब्रेकप्वाइंट xdebug, PhpStorm और Laravel 3/mod_rewrite

मैं एक Laravel 3 परियोजना के लिए xdebug और PhpStorm कॉन्फ़िगर कर दिया है। मैक ओएस एक्स अपाचे पर स्थानीय रूप से प्रोजेक्ट चला रहा है, इसलिए उसी मशीन पर phpStorm और वेब एप्लिकेशन चलाया जाता है। वर्चुअल होस्ट को कॉन्फ़िगर किया गया ताकि स्थानीयहोस्ट.एलटी लैरवेल की सार्वजनिक निर्देशिका को इंगित करे।

php.ini में प्रासंगिक xdebug प्रविष्टियों:

zend_extension = /usr/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so 
[xdebug] 
xdebug.idekey="PHPSTORM" 
xdebug.remote_enable=1 
xdebug.profiler_enable=1 
xdebug.remote_log=/var/log/xdebug_remote.log 
xdebug.remote_connect_back=1 

पुष्टि की है कि विस्तार लोड हो जाता है।

किसी भी पथ मैपिंग के बिना एक PHP वेब अनुप्रयोग डीबग/रन कॉन्फ़िगरेशन सेट करें क्योंकि कुछ भी सिम्लिंक नहीं है और वेब सर्वर पर फ़ोल्डर्स और phpStorm के फ़ोल्डर्स बिल्कुल वही हैं (जैसा कि वेब सर्वर एक ही मशीन पर है)।

जब आईडीई से "डीबग" के माध्यम से शुरू करने, xdebug_remote.log सही ढंग से ब्रेकपाइंट हम आवेदन/पुस्तकालयों में फ़ाइलों में से एक में सेट किया है पता चलता है:

<- breakpoint_set -i 5 -t line -f 
file:///Users/RalfR/src/livetime/application/libraries/LiveTime.php -n 676 
-> 
<response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="5" id="9230016"></response> 

हालांकि, जब हम एक लिंक पर क्लिक करें कि LiveTime.php लाइब्रेरी से फ़ंक्शन को आमंत्रित करता है, ब्रेकपॉइंट हिट नहीं होता है। लॉग दिखाता है:

<- stack_get -i 6 -> 
<response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="stack_get" transaction_id="6"><stack where="{main}" level="0" type="file" filename="file:///Users/RalfR/src/livetime/public/index.php" lineno="14"></stack></response> 

<- run -i 7 -> 
<response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="run" transaction_id="7" status="stopping" reason="ok"></response> 

<- run -i 8 
Log closed at 2013-04-22 21:03:57 

के रूप में कई व्यवस्थाएं, Laravel सार्वजनिक/index.php के माध्यम से पाइप सब कुछ करने के लिए .htaccess mod_rewrite का उपयोग करता है। यह phpStorm/xdebug के लिए कारण/लाइब्रेरी/LiveTime.php में ब्रेकपॉइंट को पकड़ने का कारण नहीं हो सकता है क्योंकि यह xdebug को लगता है कि LiveTime.php स्क्रिप्ट कभी निष्पादित नहीं होती है?

यदि हां, तो हम इस समस्या को कैसे हल कर सकते हैं?

+0

इसके अलावा, xdebug_break(); हमेशा काम करता है, इसलिए यह किसी गलत कॉन्फ़िगर किए गए PHP वातावरण से संबंधित नहीं है। – Ralf

+0

मुझे इसका उत्तर भी जानना अच्छा लगेगा! – kreeves

+0

मेरे पास एक ही समस्या है, केवल मैं सिम्फनी का उपयोग कर रहा हूं और यह कुछ फ़ाइलों में टूट जाता है लेकिन दूसरों को नहीं। xdebug_break(); हर जगह काम करता है। – greg

उत्तर

8

आपको Path Mappings सेट करने की आवश्यकता है आपको इसे प्रत्येक फ़ाइल के लिए सेट करने की आवश्यकता नहीं है। मेरी समस्या को हल करने के लिए, मैं IntelliJ (PHPStorm के लिए समान) प्राथमिकता> PHP> सर्वर .. मेरे सर्वर का चयन किया और निम्नलिखित सेट (नीचे नोट 2 देखें):

enter image description here

नोट 1: मैं भी सेट कर सकता था सीधे परियोजना रूट के लिए पथ, लेकिन चूंकि मुझे अपने लैरावेल "सार्वजनिक" फ़ोल्डर और मेरे आवेदन के अलावा कुछ भी डिबग करने में दिलचस्पी नहीं है, इसलिए मैं केवल उन 2 फ़ोल्डरों के लिए पथ निर्धारित करता हूं। इसके बाद सब कुछ पूरी तरह से काम किया।

नोट 2: ऊपर दिखाया गया चित्र ऊपर दिए गए चरणों में निर्दिष्ट "सेटिंग" संवाद से नहीं है, बल्कि "रिजोल पाथ मैपिंग समस्या" संवाद से है जो आपको उसी मानचित्र मैपिंग विजेट के साथ प्रस्तुत करता है जो समान कार्य करता है मार्ग। किसी भी स्थान पर सेटिंग फिक्सिंग काम करेगा। समाधान पथ मैपिंग समस्या संवाद तब दिखाई देगा यदि आपके पास प्रारंभ करने के लिए कोई सर्वर डीबग सेटिंग्स नहीं है और आईडीई मैपिंग समस्या का पता लगाता है, जिस बिंदु पर यह आपके लिए सर्वर सेटिंग्स भी बनाएगा।

+0

इसके अलावा, मैंने देखा कि एक और चीज यह है कि कभी-कभी, आपके पास आईडीई में दूरस्थ रूप से डिबगिंग करते समय सर्वर पर समान फ़ाइल नहीं हो सकती है। मेरे पास आईडीई सेटअप स्वचालित रूप से रिमोट होस्ट तक सहेजी जा रही फ़ाइल की प्रतिलिपि बनाने के लिए है, लेकिन यह हमेशा काम नहीं करता है। तो मैं मैन्युअल रूप से फ़ाइल अपलोड को बंद कर देता हूं, पुनः प्रयास करें, और यह काम करेगा। यह बताता है कि कुछ फाइल कभी-कभी डीबग क्यों करेंगे और अन्य नहीं करेंगे। फ़ाइल जो डीबग नहीं करती है वह रिमोट होस्ट पर एक से अलग है। –

+0

एक आखिरी बात .. कुछ ब्रेक लाइनें बिल्कुल काम नहीं करतीं। उदाहरण के लिए, घुंघराले ब्रेसिज़ में लिपटे 'if'' else' ब्लॉक में कोड नहीं है जो ब्रेसिज़ के बीच होगा, ब्रेक पॉइंट्स के लिए ब्रेक करें। –

+0

आपका समाधान बंद था लेकिन मेरे लिए काफी काम नहीं किया। इसके बजाय मैंने अपने प्रोजेक्ट के स्थानीय www फ़ोल्डर को PHPStorm सेटिंग्स> सर्वर में/var/www में मैप किया। – dwenaus

0

मेरे मामले में, "breakpoint_set"/"command is not available" का कारण xdebug.extended_info विकल्प अक्षम किया गया था (यह डिफ़ॉल्ट रूप से सक्षम है लेकिन मैंने इसे प्रोफाइलिंग के लिए अक्षम कर दिया है)।
ब्रेकपॉइंट्स काम नहीं करते हैं तो xdebug.extended_info अक्षम है।
xdebug.extended_info को पुनः सक्षम करने के बाद मुझे ब्रेकपॉइंट्स मिल गए हैं।

0

नेटबीन्स और लार्वेल का उपयोग करने वाले लोगों के लिए, आपको "वेब रूट" को अपने सार्वजनिक फ़ोल्डर के रूप में सेट करना होगा- जो आपके प्रोजेक्ट-> Properties-> स्रोतों में स्थित है।

Edit web root in Netbeans