Comment déboguez-vous les scripts PHP? [fermé]

403

Comment déboguez-vous les scripts PHP ?

Je connais le débogage de base, comme l'utilisation du rapport d'erreurs. Le débogage de point d'arrêt dans PHPEclipse est également très utile.

Quelle est la meilleure façon (rapide et facile) de déboguer dans phpStorm ou tout autre IDE?

Andrey Adamovich
la source
40
Je pense que c'est une excellente question! Lorsque vous ne savez pas comment aborder le débogage PHP, vous ne savez même pas comment formuler votre question, vous ne savez pas comment être plus précis que cela. Donc, il peut ne pas obéir aux règles de Stack, mais cela nous aide beaucoup, débutants, beaucoup!
Mihaela
1
à partir de php5.4 a introduit un nouveau débogueur d'interface de ligne de commande appelé phpdbg ( phpdbg.com ). PHP5.6 sera livré avec phpdbg par défaut.
Ganesh Patil
1
Avez-vous déjà entendu parler de XDebug? :)
Pratik

Réponses:

145

Essayez Eclipse PDT pour configurer un environnement Eclipse qui possède des fonctionnalités de débogage comme vous l'avez mentionné. La possibilité d'entrer dans le code est une bien meilleure façon de déboguer que l'ancienne méthode de var_dump et d'imprimer à différents points pour voir où votre flux se passe mal. Quand tout le reste échoue et que je n'ai que SSH et vim, je trouve var_dump()/ die()pour trouver où le code va vers le sud.

John Downey
la source
35
Vous devez utiliser cette fonction: kill ($ data) {die (var_dump ($ data)); } Il enregistre en tapant 10 caractères, la meilleure fonction que j'ai jamais écrite tbh :)
AlexMorley-Finch
2
Essayez github.com/tomasfejfar/enhanced-dump :)
Tomáš Fejfar
2
Existe-t-il un moyen d'embellir le "var_dump"?
RPDeshaies
6
@ AlexMorley-Finch je vous élève àkill($data) { echo "<pre>"; var_dump($data); echo "</pre>"; exit; }
Francisco Presencia
2
Le lien est "récupérable" via l'incroyable Web Archive , dernière vérification en date du 7 mai '15.
Gruber
80

Vous pouvez utiliser Firephp un add-on pour firebug pour déboguer php dans le même environnement que javascript.

J'utilise également Xdebug mentionné plus haut pour le profilage de php.

Pat
la source
3
Et voici un petit guide d'utilisation de FirePHP: sitepoint.com/debug-php-firebug-firephp
Mihaela
38

Voici mon petit environnement de débogage:

error_reporting(-1);
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_BAIL, 0);
assert_options(ASSERT_QUIET_EVAL, 0);
assert_options(ASSERT_CALLBACK, 'assert_callcack');
set_error_handler('error_handler');
set_exception_handler('exception_handler');
register_shutdown_function('shutdown_handler');

function assert_callcack($file, $line, $message) {
    throw new Customizable_Exception($message, null, $file, $line);
}

function error_handler($errno, $error, $file, $line, $vars) {
    if ($errno === 0 || ($errno & error_reporting()) === 0) {
        return;
    }

    throw new Customizable_Exception($error, $errno, $file, $line);
}

function exception_handler(Exception $e) {
    // Do what ever!
    echo '<pre>', print_r($e, true), '</pre>';
    exit;
}

function shutdown_handler() {
    try {
        if (null !== $error = error_get_last()) {
            throw new Customizable_Exception($error['message'], $error['type'], $error['file'], $error['line']);
        }
    } catch (Exception $e) {
        exception_handler($e);
    }
}

class Customizable_Exception extends Exception {
    public function __construct($message = null, $code = null, $file = null, $line = null) {
        if ($code === null) {
            parent::__construct($message);
        } else {
            parent::__construct($message, $code);
        }
        if ($file !== null) {
            $this->file = $file;
        }
        if ($line !== null) {
            $this->line = $line;
        }
    }
}
eisberg
la source
2
Je vous remercie. Cela m'a sauvé la journée. (Je devais juste supprimer cet E_STRICT)
Sec
4
assert_callcackheh
Madbreaks
32

Xdebug et le plugin DBGp pour Notepad ++ pour la chasse aux bogues lourds, FirePHP pour les trucs légers. Rapide et sale? Rien ne vaut dBug .

djn
la source
Le plugin DBGp ne fonctionne pas avec la version actuelle de notepad ++ / xdebug et il n'est pas prévu de le corriger. Vous pouvez voir ma discussion avec le créateur lié ici
Joe
26

XDebug est essentiel pour le développement. Je l'installe avant toute autre extension. Il vous donne des traces de pile sur toute erreur et vous pouvez activer facilement le profilage.

Pour un aperçu rapide de l'utilisation d'une structure de données var_dump(). Ne l'utilisez pas print_r()car vous devrez l'entourer <pre>et il n'imprimera qu'une seule var à la fois.

<?php var_dump(__FILE__, __LINE__, $_REQUEST); ?>

Pour un véritable environnement de débogage, le meilleur que j'ai trouvé est Komodo IDE mais cela coûte $$.

Julio César
la source
19

PhpEd est vraiment bon. Vous pouvez entrer / sortir / sortir des fonctions. Vous pouvez exécuter du code ad hoc, inspecter des variables, modifier des variables. C'est étonnant.

monk.e.boy
la source
4
J'ai utilisé PhpEd et je n'ai pas de mots aimables pour cela par rapport à un véritable IDE comme NetBeans ou Eclipse, et ce commentaire n'ajoute rien d'utile à la question. -1
siliconrockstar
J'ai essayé la plupart des IDE (y compris Zend, NetBeans et Eclipse) avant d'acheter PhpED Professional car c'était le meilleur d'un mile et demi. C'était il y a quelques années, donc les autres se sont peut-être améliorés depuis, mais à l'époque la plupart d'entre eux étaient terriblement lents car ils étaient écrits en Java. Je ne comprends pas comment quelqu'un peut avoir «pas de mots gentils pour ça» quand (pour moi) c'était si clairement le meilleur, la décision était une évidence.
lm713
17

1) J'utilise print_r (). Dans TextMate, j'ai un extrait de «pré» qui se développe comme suit:

echo "<pre>";
print_r();
echo "</pre>";

2) J'utilise Xdebug, mais je n'ai pas réussi à faire fonctionner l'interface graphique sur mon Mac. Il imprime au moins une version lisible de la trace de pile.

jlleblanc
la source
Je suis sûr que vous voulez dire écho "</pre>"; à la fin cependant.
altermativ
9
Vous pouvez également passer «true» à la fonction pour qu'elle renvoie la chaîne. Cela signifie que vous pouvez le faire:echo '<pre>', print_r($var, true), '</pre>';
DisgruntledGoat
16

J'ai utilisé le Zend Studio (5.5) avec Zend Platform . Cela donne un débogage correct, des points d'arrêt / un dépassement du code, etc., bien qu'à un prix.

Michael Stum
la source
16

En toute honnêteté, une combinaison de print et print_r () pour imprimer les variables. Je sais que beaucoup préfèrent utiliser d'autres méthodes plus avancées mais je trouve que c'est la plus simple à utiliser.

Je dirai que je n'ai pas vraiment apprécié cela jusqu'à ce que je fasse de la programmation sur microprocesseur chez Uni et que je n'ai pas pu l'utiliser même.

Teifion
la source
Je suis heureux que vous ayez mentionné print ainsi que print_r, j'utilise une impression de base pour voir si le code a été exécuté à un certain point, ce qui aide à isoler le problème.
Brad
J'utilise à la fois print et var_dump (). J'utilise print pour afficher les messages et informations de débogage et var_dump pour indiquer l'état des variables au fur et à mesure que les choses progressent.
Joshua K
14

Xdebug , de Derick Rethans, est très bon. Je l'ai utilisé il y a quelque temps et j'ai trouvé que ce n'était pas si facile à installer. Une fois que vous avez terminé, vous ne comprendrez pas comment vous vous en sortez sans :-)

Il y a un bon article sur Zend Developer Zone (l'installation sur Linux ne semble pas plus facile) et même un plugin Firefox , que je n'ai jamais utilisé.

Christian Lescuyer
la source
2
Ce n'est pas seulement une installation frustrante. Configurer Xdebug pour fonctionner avec Eclipse peut être un cauchemar. J'ai pu installer Xdebug sur CentOS 5 mais EclipsePDT + Xdebug ne veulent pas coopérer :(
Jahangir
11

J'utilise Netbeans avec XDebug. Consultez-le sur son site Web pour obtenir des documents sur la façon de le configurer. http://php.netbeans.org/

Nacho
la source
11

J'utilise Netbeans avec XDebug et le module complémentaire Easy XDebug FireFox

Le module complémentaire est essentiel lorsque vous déboguez des projets MVC, car la façon normale dont XDebug s'exécute dans Netbeans consiste à enregistrer la session dbug via l'URL. Avec le module complémentaire installé dans FireFox, vous devez définir les propriétés de votre projet Netbeans -> Exécuter la configuration -> Avancé et sélectionner "Ne pas ouvrir le navigateur Web". Vous pouvez maintenant définir vos points d'arrêt et démarrer la session de débogage avec Ctrl-F5 comme d'habitude. . Ouvrez FireFox et cliquez avec le bouton droit sur l'icône du module complémentaire dans le coin inférieur droit pour démarrer la surveillance des points d'arrêt. Lorsque le code atteint le point d'arrêt, il s'arrête et vous pouvez inspecter vos états de variable et votre pile d'appels.

Jannie Theunissen
la source
10

La mise en mémoire tampon de sortie est très utile si vous ne voulez pas gâcher votre sortie. Je le fais dans un one-liner que je peux commenter / décommenter à volonté

 ob_start();var_dump(); user_error(ob_get_contents()); ob_get_clean();
Ken
la source
9

PhpEdit a un débogueur intégré, mais je finis généralement par utiliser echo (); et print_r (); à l'ancienne !!

Toby Allen
la source
8

Pour les problèmes vraiment graves qui prendraient trop de temps à utiliser print_r / echo pour comprendre que j'utilise la fonction de débogage de mon IDE (PhpEd). Contrairement aux autres IDE que j'ai utilisés, PhpEd ne nécessite pratiquement aucune configuration. la seule raison pour laquelle je ne l'utilise pas pour les problèmes que je rencontre, c'est qu'il est douloureusement lent. Je ne suis pas sûr que la lenteur soit spécifique à PhpEd ou à n'importe quel débogueur php. PhpEd n'est pas gratuit mais je pense qu'il utilise de toute façon l'un des débogueurs open source (comme XDebug mentionné précédemment). L'avantage avec PhpEd, encore une fois, est qu'il ne nécessite aucune configuration que j'ai trouvée très fastidieuse dans le passé.

Karim
la source
2
Le débogueur PHPEd est en fait écrit par le même gars qui a écrit PHPEd et je suis sûr qu'il n'est pas open source. Au moins, PHPEd n'est pas fourni avec la source, mais au lieu de cela compilé .so et .dll.
Artem Russakovskii du
4

Le débogage manuel est généralement plus rapide pour moi - var_dump()et debug_print_backtrace()sont tous les outils dont vous avez besoin pour armer votre logique.

Ross
la source
3

Eh bien, dans une certaine mesure, cela dépend de l’orientation vers le sud. C'est la première chose que j'essaie d'isoler, puis j'utiliserai echo / print_r () si nécessaire.

NB: Vous savez que vous pouvez passer true comme deuxième argument à print_r () et cela retournera la sortie au lieu de l'imprimer? Par exemple:

echo "<pre>".print_r($var, true)."</pre>";
Nathan Strong
la source
2
Je viens d'envelopper cela dans une fonction appelée débogage. Alors je peux faire le débogage ($ var);
jdelator
3

J'utilise souvent CakePHP lorsque Rails n'est pas possible. Pour déboguer les erreurs, je trouve généralement leerror.log dans le dossier tmp et le queue dans le terminal avec la commande ...

tail -f app/tmp/logs/error.log

Cela vous donne une boîte de dialogue en cours d'exécution à partir de ce qui se passe, ce qui est assez pratique, si vous voulez lui envoyer quelque chose en milieu de code, vous pouvez l'utiliser.

$this->log('xxxx');

Cela peut généralement vous donner une bonne idée de ce qui se passe / mal.

MintDeparture
la source
2

Komodo IDE fonctionne bien avec xdebug, même pour le débogage de remore. Il nécessite un minimum de configuration. Tout ce dont vous avez besoin est une version de php que Komodo peut utiliser localement pour parcourir le code sur un point d'arrêt. Si vous avez le script importé dans le projet komodo, vous pouvez définir des points d'arrêt avec un clic de souris exactement comme vous le définiriez dans eclipse pour déboguer un programme java. Le débogage à distance est évidemment plus difficile à faire fonctionner correctement (vous devrez peut-être mapper l'URL à distance avec un script php dans votre espace de travail) qu'une configuration de débogage locale qui est assez facile à configurer si vous êtes sur un MAC ou un bureau Linux .

amit
la source
2

Il existe de nombreuses techniques de débogage PHP qui peuvent vous faire économiser d'innombrables heures lors du codage. Une technique de débogage efficace mais basique consiste simplement à activer le rapport d'erreurs. Une autre technique légèrement plus avancée consiste à utiliser des instructions d'impression, ce qui peut aider à identifier des bogues plus insaisissables en affichant ce qui se passe réellement à l'écran. PHPeclipse est un plug-in Eclipse qui peut mettre en évidence des erreurs de syntaxe courantes et peut être utilisé en conjonction avec un débogueur pour définir des points d'arrêt.

display_errors = Off
error_reporting = E_ALL 
display_errors = On

et aussi utilisé

error_log();
console_log();
shekh danishuesn
la source
1

Dans un environnement de production, j'enregistre les données pertinentes dans le journal des erreurs du serveur avec error_log ().

Dan Grover
la source
et que queue -f ... fonctionne très bien
markus_p
1

j'utilise zend studio pour eclipse avec le débogueur intégré. C'est toujours lent comparé au débogage avec eclipse pdt avec xdebug. Espérons qu'ils résoudront ces problèmes, la vitesse s'est améliorée par rapport aux versions récentes, mais le dépassement prend encore 2-3 secondes. La barre d'outils zend firefox facilite vraiment les choses (débogage page suivante, page actuelle, etc.). Il fournit également un profileur qui évaluera votre code et fournira des graphiques circulaires, le temps d'exécution, etc.

Brendon-Van-Heyzen
la source
1

La plupart des bogues peuvent être trouvés facilement par simple var_dump ajoutant certaines des variables clés, mais cela dépend évidemment du type d'application que vous développez.

Pour des algorithmes plus complexes, les fonctions step / breakpoint / watch sont très utiles (si ce n'est pas nécessaire)

Petr Peller
la source
1

PHP DBG

Le débogueur interactif PHP étape par étape implémenté comme un module SAPI qui peut vous donner un contrôle complet sur l'environnement sans impact sur la fonctionnalité ou les performances de votre code. Il vise à être une plate-forme de débogage légère, puissante et facile à utiliser pour PHP 5.4+ et il est livré avec PHP 5.6.

Les fonctionnalités incluent:

  • Débogage pas à pas
  • Points d'arrêt flexibles (méthode de classe, fonction, fichier: ligne, adresse, code d'opération)
  • Accès facile à PHP avec eval intégré ()
  • Accès facile au code en cours d'exécution
  • API Userland
  • SAPI Agnostic - Facilement intégré
  • Prise en charge des fichiers de configuration PHP
  • JIT Super Globals - Définissez le vôtre !!
  • Prise en charge de la ligne de lecture en option - Fonctionnement confortable du terminal
  • Prise en charge du débogage à distance - Interface graphique Java intégrée
  • Opération facile

Voir les captures d'écran:

PHP DBG - Stepthrough Debugging - capture d'écran

PHP DBG - Stepthrough Debugging - capture d'écran

Page d'accueil: http://phpdbg.com/

Erreur PHP - Meilleur rapport d'erreurs pour PHP

C'est une bibliothèque très facile à utiliser (en fait un fichier) pour déboguer vos scripts PHP.

La seule chose que vous devez faire est d'inclure un fichier comme ci-dessous (au début sur votre code):

require('php_error.php');
\php_error\reportErrors();

Ensuite, toutes les erreurs vous donneront des informations telles que la trace, le contexte du code, les arguments de fonction, les variables de serveur, etc. Par exemple:

Erreur PHP |  Améliorer le rapport d'erreurs pour PHP - capture d'écran de backtrace Erreur PHP |  Améliorer le rapport d'erreurs pour PHP - capture d'écran de backtrace Erreur PHP |  Améliorer le rapport d'erreurs pour PHP - capture d'écran de backtrace

Les fonctionnalités incluent:

  • trivial à utiliser, c'est juste un fichier
  • erreurs affichées dans le navigateur pour les requêtes normales et ajaxy
  • Les requêtes AJAX sont suspendues, vous permettant de les réexécuter automatiquement
  • rend les erreurs aussi strictes que possible (encourage la qualité du code et tend à améliorer les performances)
  • extraits de code sur toute la trace de la pile
  • fournit plus d'informations (telles que les signatures de fonctions complètes)
  • corrige certains messages d'erreur qui sont tout simplement faux
  • coloration syntaxique
  • semble joli!
  • personnalisation
  • allumer et éteindre manuellement
  • exécuter des sections spécifiques sans rapport d'erreur
  • ignorer les fichiers vous permettant d'éviter de mettre en évidence le code dans votre trace de pile
  • fichiers d'application; ceux-ci sont prioritaires en cas d'erreur!

Page d'accueil: http://phperror.net/

GitHub: https://github.com/JosephLenton/PHP-Error

Ma fourchette (avec correctifs supplémentaires): https://github.com/kenorb-contrib/PHP-Error

DTrace

Si votre système prend en charge le traçage dynamique DTrace (installé par défaut sur OS X) et que votre PHP est compilé avec les sondes DTrace activées ( --enable-dtrace) qui devraient être par défaut, cette commande peut vous aider à déboguer le script PHP sans délai:

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); }'

Donc, étant donné que l'alias suivant a été ajouté à vos fichiers rc (par exemple ~/.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); }"'

vous pouvez tracer votre script avec facile à retenir alias: trace-php.

Voici un script dtrace plus avancé, il suffit de l'enregistrer dtruss-php.d, de le rendre exécutable ( chmod +x dtruss-php.d) et de l'exécuter:

#!/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));
}

Page d'accueil: dtruss-lamp chez GitHub

Voici une utilisation simple:

  1. Run: sudo dtruss-php.d.
  2. Sur une autre course terminal: php -r "phpinfo();".

Pour tester cela, vous pouvez aller dans n'importe quel docroot avec index.phpet exécuter le serveur PHP intégré en:

php -S localhost:8080

Après cela, vous pouvez accéder au site à http: // localhost: 8080 / (ou choisir le port qui vous convient). De là, accédez à certaines pages pour voir la sortie de trace.

Remarque: Dtrace est disponible sur OS X par défaut, sous Linux, vous avez probablement besoin de dtrace4linux ou recherchez d'autres alternatives .

Voir: Utiliser PHP et DTrace sur php.net


SystemTap

Vous pouvez également vérifier le suivi SystemTap en installant le package de développement SystemTap SDT (par exemple yum install systemtap-sdt-devel).

Voici un exemple de script ( all_probes.stp) pour tracer tous les points de sonde statiques PHP principaux pendant toute la durée d'un script PHP en cours d'exécution avec SystemTap:

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));
}

Usage:

stap -c 'sapi/cli/php test.php' all_probes.stp

Voir: Utiliser SystemTap avec PHP DTrace Static Probes sur php.net

kenorb
la source
0

+1 pour print_r (). Utilisez-le pour vider le contenu d'un objet ou d'une variable. Pour le rendre plus lisible, faites-le avec une balise pre afin que vous n'ayez pas besoin d'afficher la source.

echo '<pre>';
print_r($arrayOrObject);

Aussi var_dump ($ thing) - c'est très utile pour voir le type de sous-éléments

Polsonby
la source
Une version étendue peut être trouvée ici devarticles.in/php/useful-function-to-output-debug-data-in-php
Arvind K.
0

En fonction du problème, j'aime une combinaison de error_reporting (E_ALL) mélangée à des tests d'écho (pour trouver la ligne / le fichier incriminé, l'erreur s'est produite au départ; vous SAVEZ que ce n'est pas toujours la ligne / le fichier php qui vous le dit?), La correspondance des accolades IDE (pour résoudre les problèmes "Erreur d'analyse: erreur de syntaxe, $ end inattendu") et print_r (); sortie; dumps (les vrais programmeurs voient la source; p).

Vous ne pouvez pas non plus battre phpdebug (vérifier sourceforge) avec "memory_get_usage ();" et "memory_get_peak_usage ();" pour trouver les zones problématiques.

Eric Lamb
la source
0

Les débogueurs intégrés où vous pouvez regarder les valeurs de changement de variable pendant que vous parcourez le code sont vraiment cool. Ils nécessitent cependant une configuration logicielle sur le serveur et une certaine quantité de configuration sur le client. Les deux nécessitent un entretien périodique pour rester en bon état de fonctionnement.

Un print_r est facile à écrire et est garanti pour fonctionner dans n'importe quelle configuration.

Michael Luton
la source
0

Habituellement, je trouve créer une fonction de journal personnalisé capable d'enregistrer sur un fichier, de stocker des informations de débogage et finalement de réimprimer sur un pied de page commun.

Vous pouvez également remplacer la classe d'exception commune, afin que ce type de débogage soit semi-automatisé.

Joshi Spawnbrood
la source