9
votes

NetBeans-Xdebug fonctionne, mais n'expose pas certaines variables PHP

Mise à jour forte> - Travailler sur WAMP avec phpDeveloper / xdebug code> aller. Je veux toujours netbeans - je veux juste comparer, voir si je reçois des idées.


J'utilise NetBeans 6.9 strong> avec lampe forte> et et Xdebug strong> fonctionner sur le code PHP. L'affichage des variables fonctionne bien, mais dernièrement, cela fonctionne moins bien. Par exemple, ci-dessous, $ autorisé code> doit être visible dans le volet Variables en dessous du code et doit exposer sa valeur. Mais cela ne montre pas, ni sa valeur et smooring sur le code n'aide pas. (Le $ CU CODE> L'objet est montrant et fonctionnent et activé, mais $ autorisé code> n'est pas là, et cela n'aurait pas de sens si c'était.) P>

Ce comportement est cohérent. Peut-être que c'est une fonction de la complexité du code? Ou usage d'objet rampant? Il semble avoir commencé quand j'ai pris le codédiciteur. P>

Bien sûr, les variables sont cachées quand j'en ai besoin le plus ... ou il semble donc que le pauvre humain. Qu'est-ce que je manque? P>

Netbeans débogueur http://themanthursday.com/wiki/ Débogger_display.png p>

Il y a un meilleur exemple ci-dessous. Lorsque je passe à travers ce code, les variables affichent uniquement les superglobals em> et $ ceci em>, comme dans l'image. Je ne peux pas voir des valeurs, même de simples cordes. P>

(pensée nagurgique: je parie que le SUPEROBJEC $ CI a quelque chose à voir avec tout cela ...) em> p>

class Product_documents {
  function getProductImage_all($id)
//Return an array of all documents for this product
{
  $imgPath = $this->_getProductImage_folder($id);
  $arrayPossibleFilenames = $this->_getProductImage_possible_files($id);
  foreach ($arrayPossibleFilenames as $imgFile) {
    $imgPathFull = $imgPath.$imgFile;

    $file_exists = get_file_info($imgPathFull);
    if ($file_exists) 
    {
    $arrayFilesPresent[] = $imgPathFull;
    }
  }
  return $arrayFilesPresent;        
}
}


0 commentaires

6 Réponses :


-1
votes

essayez d'initialiser $ autorisé à bool faux.

J'ai vu NetBeans ne me montre pas les variables initialisées avec une valeur de retour d'une fonction sans Doctype, mais il est suffisamment touché pour ne pas être un motif de.


3 commentaires

J'ai ajouté ceci juste au-dessus du point d'arrêt: $ autorisé = faux; Pas de changement. Est-ce ce que tu veux dire? En outre, après avoir posté, je me suis rendu compte que je peux produire un exemple plus intéressant de variables non exposées ... je peux travailler cela un peu plus tard.


-1 parce que la suggestion n'a pas fonctionné, la prime devrait donc aller ailleurs d'ailleurs. Mais merci à Fanis pour la suggestion.


Pas de soucis. Comme je l'ai dit, c'est frappé ou manquait pour moi. Quelque chose d'autre que j'ai remarqué, c'est que cela échouera occasionnellement de récupérer des variables dans la portée globale si le script étant débogué n'a aucune fonction.



2
votes

J'ai vu des choses comme ça avant dans Netbeans. Je m'attends à ce que ce soit juste un bug impliquant l'interaction de Netbean avec Xdebug. Une solution possible que j'ai vue auparavant est d'ajouter une "montre" pour la variable que vous ne pouvez pas voir. Pour votre exemple, vous pouvez aller dans l'onglet "Montres" et saisir $ autorisé . Il devrait apparaître une fois qu'il a été défini.


7 commentaires

Merci, bonne idée. L'utilisation d'une montre ne m'a pas eue, seulement parce que dans VBA, ils semblent être particulièrement inefficaces. Je dois "penser en dehors de la boîte" - ou pour le dire plus à juste titre, je dois penser à une boîte différente.


Ouais, malheureusement, cette boîte particulière pourrait ne pas toujours être le meilleur environnement à penser: p


Désolé de dire, j'ai été occupé et je n'ai pas essayé cela - mais j'espère essayer ce soir. Quant à l'expérience WAMP, j'ai toujours besoin de finir avec un Xdebug de travail. (Parfois, je voudrais juste que je puisse faire mon travail en temps réel. Ha ha.)


Conclusions: Tout d'abord, définir une montre fonctionne. Maintenant, dans la capture d'écran ci-dessus, et ces superglobaux sont rejoints par une 3ème ligne, qui est la montre. Deuxièmement, j'aime la théorie de Steven's 'juste une théorie de bug'. Troisièmement, le débogage de phpdesigner semblait gênant (le débogage de la page principale ne s'est pas arrêté à un point d'arrêt dans une page différente). Donc, je ne pouvais pas arriver à un test de comparaison. Je suis sûr avec plus d'effort, je pourrais le comprendre et faire la comparaison. En conclusion, NetBeans est fonctionnel (Hourra) avec cette perspicacité supplémentaire.


Mauvaise-conclusion: utiliser une montre travaillée sur NetBeans sur la machine WinXP. Sur la maison Ubuntu, fixez des montres à compter des causes XDEBUG à complètement reprocher.


@Smandoli Désolé d'entendre que cela ne fonctionnait pas sur Ubuntu ... encore une fois, je pourrais vous plaindre des développeurs de Netbeans à ce sujet, car il y a évidemment des trucs buggy qui y vont. Une autre chose à envisager peut être d'installer la nouvelle version de Netbeans (comme dans une construction nocturne) et de voir si cela a toujours les mêmes problèmes.


Merci Steven. Je suis retourné à PHPDesigner et s'il était intéressé de constater qu'il semble légèrement compromis dans l'exposition de VARS (dit «non initialisé» beaucoup, je suis sûr que c'est une idée de toute la question) - mais les travaux de la souris, le débogage est donc réalisable. Très reconnaissant pour des suggestions aujourd'hui et poursuivra comme Dieu me subit de la force.



6
votes

est tombé sur ce site qui a un très bon lien avec une page xdebug qui englobe un à travers le processus de mise à niveau de Xdebug en compilant une version «plus récente»:

http: / /icephoenix.us/php/xdebug-doesnt-show-local-variables-in-komodo-netbeans-or-eclipse-pdt/

Les variables à l'intérieur par des objets / classes se présentent à nouveau! Ouais!

Aucune montre, non 'Cela peut faire de xdebug freak Out' Messages - juste de bonnes variables qui exposent désormais complètement la défaillance de ma solution ... (haha).

David


0 commentaires

9
votes

Cliquez avec le bouton droit sur le volet de variable. Sélectionnez "Filtres". Vous trouverez le secret.


5 commentaires

Merci kamal. Ironiquement, j'ai supprimé Netbeans aujourd'hui, après avoir retourné à PHPDesigner Pro ... et après avoir abandonné Cadedigniter il y a quelque temps. Je continuerai à regarder cet article avec intérêt. BTW, j'ai conclu que l'utilisation du singleton de CI était la clé; Je me demande si "le secret" que vous avez offert validerait cela.


Merci ! Je pensais que c'était une autre question de Xdebug, cela sauvera beaucoup de temps pour moi


Ne pouviez-vous pas simplement dire ce que ce "secret" consiste à la place? J'aimerais savoir sans avoir à installer Netbeans sur mon iPad.


Ce «secret» répertorie les types de variables présentées dans le débogueur. Les variables UNIATIALISÉE et NULLES ne sont pas affichées par défaut. De plus, dans php.ini sous [xdebug], ensemble xdebug.show_local_vars = 1 si vous voulez toutes les variables locales - très importante.


Merci. Cela m'a aidé avec Stackoverflow.com/q/54226662/470749



0
votes

Je pense que cela revient au schéma singleton mis en œuvre dans CodeIndriter comme "Super Object". Je n'ai jamais redémarré ce projet pour tester l'idée de Kamal. Peu de temps après avoir publié, j'ai conclu que le singleton était la raison (je n'ai pas essayé de deviner si Kamal a la solution ou non). Ainsi, ma réponse à Cet article .


0 commentaires

0
votes

(2015) dans php.ini sous [xdebug], définissez xdebug.show_local_vars = 1 si vous voulez toutes les variables locales en mode de débogage.


1 commentaires

Ça ne fait pas ce que tu penses. De xdebug.org/docs/all_settings :: Lorsque ce paramètre est défini sur quelque chose! = 0 xdebug a généré Les vidanges de pile dans les situations d'erreur montrent également toutes les variables dans la portée supérieure. Méfiez-vous que cela pourrait générer beaucoup d'informations, et est donc désactivé par défaut.