IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Pile d'appel (debug_backtrace) [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 112
    Par défaut Pile d'appel (debug_backtrace)
    Bonjour, j'ai un petit problème avec la pile d'appel, je n'arrive pas à récupérer une ligne spécifique.

    Dans cette configuration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    class A
    {
    	public function __construct()
    	{
    		try
    		{
    			B::doSomething();
    		}
    		catch (Exception $e)
    		{
    			B::log($e);
    		}
    	}
    }
     
    class B
    {
    	static function doSomething() { throw new Exception(); }
     
    	static function log($e)
    	{
    	    echo 'line '.$e -> getLine()."\n";
                $s = debug_backtrace();
                foreach ($s as $i) echo 'line '.$i['line']."\n";
    	}
    }
     
    $a = new A();
    ...j'aimerais récupérer la ligne B::doSomething() (nécessaire quand le bloc try fait 15 km) dans la classe A mais j'obtiens quelque chose de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    line 18 // throw new Exception();
    line 11 // B::log($e);
    line 28 // $a = new A();
    Donc pourquoi je ne peux pas obtenir la ligne 7 entre les deux premières ?

    Merci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 112
    Par défaut
    Bon à priori ça a l'air impossible, si j'explore le backtrace dans chaque bloc j'obtiens quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    try
    line 28
     
    doSomething
    line 7
    line 28
     
    catch
    line 28
     
    log
    line 11
    line 28
    Il semble que le bloc catch zappe complètement ce qui se passe dans le bloc try, et donc que le côté contexte prenne le pas sur le côté pile ,...ce qui n'est pas super pratique dans mon cas car je ne vois pas du tout comment faire ça autrement de manière transparente, je suis donc forcé de trouver les erreurs par tâtonnement, pas glop...

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    normale t’utilises mal le backtrace, la t'en crée un nouveau donc rien a voir avec celui de l'exception

    c'est :

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 112
    Par défaut
    C'était bien ça, excellent.
    J'avais du m'arrêter à getLine() dans la lecture de cette classe. ^^
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. tracer pile d'appels
    Par Estats dans le forum Delphi
    Réponses: 1
    Dernier message: 05/09/2006, 22h30
  2. Affichage de la pile d'appel lors d'une exception
    Par damien.yep dans le forum Langage
    Réponses: 1
    Dernier message: 14/09/2005, 17h42
  3. pile d'appel
    Par benoit70 dans le forum MFC
    Réponses: 15
    Dernier message: 19/05/2005, 01h44
  4. []Augmenter la taille de la pile des appels ?
    Par oncle ervil dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/05/2005, 10h29
  5. [Exception]Connaitre la pile d'appel de classes/méthodes
    Par salome dans le forum Général Java
    Réponses: 2
    Dernier message: 19/03/2005, 21h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo