Fonctionnalités Log et Trace
Haxe fournit un puissant système équivalent au trace d'ActionScript. Dans vos classes, vous pouvez simplement appeler la fonction "trace" n'importe où :
trace("Hello world !");
Par défault, dans Flash, "trace" affichera le résultat dans l'écran SWF dans un TexteField déroulant. Dans Neko, il sera envoyé vers stdout et en JavaScript, il sera affiché dans un "DIV" avec l'ID "haxe:trac". Chaque résultat est affiché avec le nom du fichier le numéro de ligne correspondant à l'endroit où "trace" a été appelé :
Test.hx:11: Hello world !
En Flash, vous pouvez effacer le résultat affiché grâce à Log.clear().
Votre trace personnalisé
Vous pouvez rediriger la sortie de trace en changeant la méthode "Log.trace" où tous les résultats sont envoyés.
Par exemple :
class MyTrace { public static function setRedirection() { haxe.Log.trace = myTrace; } private static function myTrace( v : Dynamic, ?inf : haxe.PosInfos ) { // ..... } }
L'argument "v" est le premier paramètre de "trace". Il peut être une "String" (comme "Hello World" dans notre exemple précédent) ou n'importe quelle valeur. L'argument "inf" contient toutes les informations de débuguage nécessaires à l'affichage de l'erreur :
package haxe; typedef PosInfos = { var fileName : String; var lineNumber : Int; var className : String; var methodName : String; var customParams : Array<Dynamic>; }
Le tableau "customParams" contient tous les arguments "extra" qui étaient donnés au "trace" original.
Par exemple :
class Test { function foo() { trace("hello","warning",123); } }
Sera compilé comme s'il était appelé ainsi :
haxe.Log.trace( "hello", { className : "Test", methodName : "foo", fileName : "Test.hx", lineNumber : 3, customParams : ["warning",123] } );
Supprimer tous les traces
Vous pouvez simplement supprimer toutes les informations "trace" en compilant votre projet avec l'argument "--no-traces". Ceci ignorera tous les appels à la fonction "trace", comme s'ils n'étaient pas présent dans le programme.
here
Une autre manière d'obtenir des informations de position est d'utiliser l'identifiant spécial "here" qui étend automatiquement à une structure de "haxe.PosInfos" :
class Test { static function main() { trace(here.methodName); } }
Ceci affichera "main" bien sûr.
Paramètre de position extra
Il est parfois utile de définir une méthode personnalisée qui affiche des valeurs dans certains cas. Prenons en exemple la classe suivante :
class Test { static function assert( cond : Bool, ?pos : haxe.PosInfos ) { if( !cond ) haxe.Log.trace("Assert in "+pos.className+"::"+pos.methodName,pos); } static function main() { assert( 1 == 1 ); // nothing assert( 0 == 3 ); // trace "Assert in Test::main" } }
Cet usage est possible quand le paramètre optionnel "haxe.PosInfos" n'est pas défini, la valeur par défaut sera toujours remplacée par "here" à la place de "null".