Salut,

Envoyé par
Sanguko
__FILE__ et __LINE__ ne te permettent pas de connaitre l'appelant. D'ailleurs, il me semble que tu ne peux pas connaitre la pile d'appel, contrairement en java.
En C tu ne peux pas connaitre la pile d'appel, mais en combinant __FILE__ et __LINE__ avec une macro pour appeler une fonction tu peux obtenir des infos sur la classe appelante...

Envoyé par
Sanguko
Comme la dit ®om, essaie en priorité d'utiliser les API existantes (Logger, ou log4j).
+1 pour utiliser les solutions existante... tant qu'à faire 

Envoyé par
Sanguko
Sinon, il faut fouiller dans la pile (cf StackTraceElement, Exception, etc ...)
Par exemple :
1 2 3 4 5 6 7 8 9 10
| public static void showCaller() {
StackTraceElement[] stack = Thread.currentThread().getStackTrace();
StackTraceElement caller = stack[2];
System.out.println(caller);
System.out.println("Nom de la classe : " + caller.getClassName());
System.out.println("Nom de la méthode : " + caller.getMethodName());
System.out.println("Nom du fichier : " + caller.getFileName());
System.out.println("Numéro de ligne : " + caller.getLineNumber());
} |
Par contre la méthode getStackTrace() n'est apparut dans la classe Thread qu'avec Java 5.0. Pour les JDK plus anciens il suffit d'instancier un objet Throwable pour retrouver cette info :
StackTraceElement[] stack = new Throwable().getStackTrace();
Par contre attention à bien laisser la possibilité de désactiver tout cela, car la génération du stacktrace est un peu couteuse et peu affecter les performances si elle est utiliser abusivement...
a++
Partager