OVH Cloud OVH Cloud

Traceback d'une méthode

3 réponses
Avatar
Skunk
Bonjour à tous,

Juste une simple petite question de débutant en Java.
Comment déterminer (en l'affichant dans un terminal par exemple) quelles
sont les méthodes successives qui vont être appelées si on execute une
certaine méthode ?

Par exemple si j'ai :

public void main(String[] args) {

public void method_a()
{
system.out.println("test");
}
public void method_b(int b)
{
a(b);
}
public void method_c(int c)
{
b(c);
}

method_c(1);
}

y'a-t-il un moyen simple (peut-être en utilisant une exception avec
printStackTrace() ?) de tracer l'appel de la méthode "main",
c'est-à-dire de savoir qu'elle va faire appeler successivement
"method_c", "method_b" puis "method_a" ?

Merci bien !

3 réponses

Avatar
Eric Jacoboni
Skunk writes:


Par exemple si j'ai :


[couic]

Le problème c'est que tu ne peux pas avoir...

En Java, on ne peut pas imbriquer les définitions de méthodes comme on
peut le faire en Pascal ou en Ada, par exemple. Donc toutes tes
méthodes doivent être définies au même niveau.


public void method_b(int b)
{
a(b);
}
public void method_c(int c)
{
b(c);


Et elles sortent d'où, les méthodes a() et b() ?

y'a-t-il un moyen simple (peut-être en utilisant une exception avec
printStackTrace() ?) de tracer l'appel de la méthode "main",


Une méthode simple consiste à faire un println dans chacune des
méthodes : quand elles seront appelées le message s'affichera.

--
Éric Jacoboni, né il y a 1414608841 secondes

Avatar
Cédric Chabanois
Avec :
new Throwable().getStackTrace()

à condition d'utiliser au moins le JDK 1.4

sinon il faut passer par new Trowable().printStackTrace(writer) et
parser ...


Mais :
- tu vas avoir la call stack. Ce n'est pas tout à fait ce que tu
demandais ...
- Java n'est pas devin : il affiche par où tu es passé, pas par où tu
vas passer ...

Sinon effectivement pour avoir la liste des méthodes qui ont été
appelées, il faut logger dans chaque méthode. Pour le faire
automatiquement, il faut voir du côté de la programmation orienté aspect ...

Cédric

Bonjour à tous,

Juste une simple petite question de débutant en Java.
Comment déterminer (en l'affichant dans un terminal par exemple) quelles
sont les méthodes successives qui vont être appelées si on execute une
certaine méthode ?

Par exemple si j'ai :

public void main(String[] args) {

public void method_a()
{
system.out.println("test");
}
public void method_b(int b)
{
a(b);
}
public void method_c(int c)
{
b(c);
}

method_c(1);
}

y'a-t-il un moyen simple (peut-être en utilisant une exception avec
printStackTrace() ?) de tracer l'appel de la méthode "main",
c'est-à-dire de savoir qu'elle va faire appeler successivement
"method_c", "method_b" puis "method_a" ?

Merci bien !






Avatar
Zouplaz
Skunk - :

Bonjour à tous,

Juste une simple petite question de débutant en Java.
Comment déterminer (en l'affichant dans un terminal par exemple) quelles
sont les méthodes successives qui vont être appelées si on execute une
certaine méthode ?

Par exemple si j'ai :

public void main(String[] args) {

public void method_a()
{
system.out.println("test");
}
public void method_b(int b)
{
a(b);
}
public void method_c(int c)
{
b(c);
}

method_c(1);
}

y'a-t-il un moyen simple (peut-être en utilisant une exception avec
printStackTrace() ?) de tracer l'appel de la méthode "main",
c'est-à-dire de savoir qu'elle va faire appeler successivement
"method_c", "method_b" puis "method_a" ?

Merci bien !




Tout dépend de l'IDE que tu utilises, dans eclipse il y a une foncton "Call
Hierarchie" : tu lui indiques une méthode et tu sauras quelles sont les
méthodes appellantes...

Dans l'exemple que tu donnes, tu te positionnes dans method_a() et tu
obtiendrais (en résumant ):

method_a()
-> method_b()
-> method_c()
-> main()

Avec le nombre de "matches" pour chaque méthode appellante...

Je ne sais pas si c'est ce que tu cherches mais ça peut aider !