2014-04-23 8 views
11

che sto cercando di eseguire il debug di questo codice:PhpStorm/Xdebug non può mostrare le matrici spettacolo bambino di oggetti

public function removeBlankLines() { 
    $this->qp->find('br'); 
    } // <-- break point is here 

Quando ho drill-down in questo oggetto $ (usando PhpStorm) Non riesco a vedere la . gamma bambino mi interessa Esso mostra solo "non può ottenere la proprietà" Schermata:

phpStorm debug pane screenshot

io sono "in ascolto per le connessioni di debug" caratteristica. Sto eseguendo lo script dalla riga di comando. versione di PHP:

[[email protected] ~]$ php -v 
PHP 5.4.24 (cli) (built: Jan 19 2014 21:32:15) 
Copyright (c) 1997-2013 The PHP Group 
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies 
with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans 

forse relativa: http://bugs.xdebug.org/view.php?id=996?

+1

http://youtrack.jetbrains.com/issue/WI-15975. Credo che sia tutto a causa del modo in cui SplObjectStorage e simili (ArrayObject etc) sono implementati ** internamente **. Questo dovrebbe essere un problema di xdebug/php piuttosto che di PhpStorm. – LazyOne

+0

Grazie LazyOne. Quindi non c'è soluzione/soluzione? –

+1

Bene ... vedi se aggiungerlo al pannello "Orologi" farà meglio ('$ this-> qp-> matches-> storage'). Altrimenti commenta/attendi risposta su xdebug issue tracker. Post scriptum Puoi anche provare la versione 2.2.4 xdebug più recente, ma credo che non ci siano cambiamenti in questo senso dal tuo 2.2.3. – LazyOne

risposta

9

http://bugs.xdebug.org/view.php?id=686

E 'tutto su come tali classi (SplObjectStorage, ArrayObject e simili) sono implementate internamente:

this is because objects of the class SplObjectStorage are not user land PHP objects but special super duper internal ones. A similar situation will happen with many other internal PHP classes.

per quanto ne so nulla può essere fatto da parte di PhpStorm fino xdebug saranno in grado di " sostenere "loro.


UPDATE: Il biglietto xdebug citato è stato risolto per xdebug 2.3.3 po 'di tempo fa (ultima versione stabile è xdebug 2.4.1) e dovrebbe essere possibile visualizzare tali classi in debugger.

+0

Puoi confermare che funziona effettivamente con il nuovo versione di Xdebug? Ho appena installato e abilitato 2.4.1 sulla mia macchina vagabonda, ma sto ancora ricevendo l'errore di cui sopra durante il tentativo di visualizzare la proprietà di archiviazione di un oggetto ArrayObject. – Subsurf

+0

@Subsurf Fornisci del semplice esempio di codice con alcune spiegazioni/screenshot di come appare dalla tua parte. Ho appena testato con codice di esempio dal ticket bug xdebug usando PhpStorm 2016.2.1 + PHP 5.6.26 (x86 nts) + xdebug 2.4.0 su Windows 7 e mi ha mostrato gli interni dell'oggetto 'SplObjectStorage' - https://postimg.org/image/kwfwp52sh/ – LazyOne

+0

Sto ancora ricevendo questo errore, anche se ho Xdebug v2.4.0 e PhpStorm 2017.1.3. – RaisinBranCrunch

6
  • Amplia il tuo xdebug alla versione 2.3.3, che ha risolto il problema http://bugs.xdebug.org/view.php?id=686#c3116
  • Se si esegue vagabondo assicurarsi di effettuare l'aggiornamento a xdebug
    macchina virtuale vagabonda.
  • Istruzioni per l'aggiornamento può essere ottenuto forma http://xdebug.org/wizard.php

    Se l'aggiornamento non è un'opzione, è possibile scaricare il contenuto come ultima
    resort.

    Nel valutare l'espressione si può provare qualcosa di simile

    file_put_contents ('dump.txt', var_export ($ requiredVariable, true));

+0

Questa è una buona soluzione, 'file_put_contents ('dump.txt', var_export ($ requiredVariable, true));' grazie! Il file verrà creato nella root del progetto. – john

+0

Suggerirei di aggiornare l'estensione xdebug @john – zainengineer

0

Si riceverà anche un errore di ! can not get property, se la proprietà che si sta tentando di ispezionare è ereditata da una classe genitore e non visibile dalla dell'ambito corrente.

Esempio:

xDebug annota la proprietà pertinente come tale:

$childClass = {path\to\child\Child} 
    *path\to\class\Parent*property = {path\to\property\Property} 

Dove:

  • Parent è la classe base
  • Child è la classe estende
  • .210 è la proprietà ereditata, definita su Genitori

Nota l'asterisco * che identificano questo caso e indichiamo 'non visibile nell'ambito corrente'.

Soluzione:

La soluzione rapida per attivare il debug è quello di impostare la visibilità della struttura del genitore per public.

cioè

class Parent { 
    public $property; // instead of private or protected 
} 

class Child extends Parent{ 
    // You can now inspect parent::$property for instances of Child 
} 

Ricordate di impostare la visibilità proprietà indietro al valore corretto una volta terminato il test.

0

Linux LDME2
php5.6.30-0+deb8u1
xdebug v2.5.3

Ho provato questo ricetto.

php -i | xclip -selection clipboard 

messo a, e seguito le istruzioni

https://xdebug.org/wizard.php 

ho ottenuto questo risultato (non possono ottenere proprietà)

sha256sum ~/xdebug-from-src/xdebug-2.5.3/modules/xdebug.so afbb70941387ff1e191433d2a09ff42a393caac773194c0e9004b844a0f3d73b

ho finded correzione per questo problema. Invece compilare dai sorgenti, hanno bisogno di installare da PECL

sudo pecl install xdebug 

sha256sum /usr/lib/php5/20131226/xdebug.so b82f2a4ab101323d3600a79223143e2eefe941d404c88af2bd7434fd47caaf13

php -v 

PHP 5.6.30-0+deb8u1 (cli) (built: Feb 8 2017 08:50:21) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies with Xdebug v2.5.3, Copyright (c) 2002-2017, by Derick Rethans

Problemi correlati