Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/06/2011, 00h12   #1
Invité régulier
 
Inscription : juillet 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 30
Points : 9
Points : 9
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 :
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 :
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.
brice_(29) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 23h36   #2
Invité régulier
 
Inscription : juillet 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 30
Points : 9
Points : 9
Bon à priori ça a l'air impossible, si j'explore le backtrace dans chaque bloc j'obtiens quelque chose comme ça :
Code :
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...
brice_(29) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 09h55   #3
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
normale t’utilises mal le backtrace, la t'en crée un nouveau donc rien a voir avec celui de l'exception

c'est :
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 13h25   #4
Invité régulier
 
Inscription : juillet 2004
Messages : 30
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 30
Points : 9
Points : 9
C'était bien ça, excellent.
J'avais du m'arrêter à getLine() dans la lecture de cette classe. ^^
Merci.
brice_(29) est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h43.


 
 
 
 
Partenaires

Hébergement Web