Traquer les bugs
![]()
Suite à une discussion avec Xuxu, j’ai décidé de poster un petit article sur une classe que j’avais développé pour me permettre de récupérer des traces que j’avais disséminé dans mon code.
La propriété trace() Flash est certes pratique mais elle ne nous permet pas d’effectuer un suivis des traces lorsque l’animation est publiée sur le web ou au sein d’un exécutable, pour mes besoins personnels j’avais donc sorti ce petit afficheur de traces.
Après un dépoussiérage en règle (merci à Néolao en passant) je vous la communique :
- /**
- * Visual tracer VisualTracers
- * @author lcharpentier (onblogevent.com)
- *
- * Events registered :
- * onAlert : by displaying an alert
- * onClose : by closing the VisualTracer’s window
- */
- import com.tekool.utils.Relegate;
- import mx.events.EventDispatcher;
- class com.loctar.utils.VisualTracer {
- private var _loaded:Boolean;
- private static var _support:MovieClip;
- private static var _depth:Number;
- private static var dispatchEvent:Function;
- public static var addEventListener:Function;
- public static var removeEventListener:Function;
- private static var _clip:MovieClip;
- private static var _arrMsg:Array;
- private static var _hWindow:Number;
- private static var _wWindow:Number;
- /**
- * Constructor
- */
- public static function init(mc:MovieClip) {
- if ( _support==undefined) {
- _support = mc;
- }
- _arrMsg = new Array();
- EventDispatcher.initialize(VisualTracer);
- }
- /**
- * Show the tracking tool
- */
- public static function show() {
- if(_clip!=undefined)
- _clip._visible = true;
- }
- /**
- * Hide the tracking tool
- */
- public static function hide() {
- if(_clip!=undefined)
- _clip._visible = false;
- }
- /**
- * Show the message in a Window and dispatch an alert
- * @param s String
- */
- public static function alert(s:String) {
- if (_clip == undefined) {
- buildWindow();
- }
- _arrMsg.push(s);
- var x:Number = 20;
- var y:Number = clip.height/2;
- var w:Number = 300;
- var h:Number = 20;
- _clip.strMsg.text = “”;
- for (var i:Number = 0; i<_arrMsg.length; i++) {
- _clip.strMsg.text += “[“i“.] < “_arrMsg[i]” >n“;
- }
- dispatchEvent({type:“onAlert”, target:VisualTracer});
- }
- /**
- * Build the VisualTracer’s window
- */
- private static function buildWindow() {
- _clip = support.createEmptyMovieClip(“VisualTracerWindow”, support.getNextHighestDepth());
- var fond:MovieClip = _clip.createEmptyMovieClip(“fond”, 1);
- var barre:MovieClip = _clip.createEmptyMovieClip(“barre”, 2);
- var close:MovieClip = _clip.createEmptyMovieClip(“close”, 3);
- var bouton:MovieClip = _clip.createEmptyMovieClip(“bouton”, 4);
- _wWindow = 400;
- _hWindow = 250;
- drawRectangle(fond, 0xEBEBEB, 0×999999, 0, 0, wWindow, hWindow);
- drawRectangle(barre, 0xCCCCCC, 0×999999, 0, 0, _wWindow, 20);
- drawRectangle(close, 0xCC0000, 0xFFFFFF, _wWindow-16, 4, 12, 12);
- var strFt1:TextFormat = new TextFormat();
- strFt1.font = “Arial”;
- strFt1.color = 0xDC241F;
- strFt1.size = 18;
- strFt1.bold = true;
- var strFt2:TextFormat = new TextFormat();
- strFt2.font = “Arial”;
- strFt2.color = 0×000000;
- strFt2.size = 12;
- strFt2.bold = true;
- var strFt3:TextFormat = new TextFormat();
- strFt3.font = “Arial”;
- strFt3.color = 0×000000;
- strFt3.italic = true;
- strFt3.size = 12;
- _clip.createTextField(“strVisualTracer1”, _clip.getNextHighestDepth(), 10, 30, 10, 10);
- var strVisualTracer1:TextField = _clip.strVisualTracer1;
- strVisualTracer1.selectable = false;
- strVisualTracer1.autoSize = “left”;
- strVisualTracer1.text = “WARNING : An error occured”;
- strVisualTracer1._height = strVisualTracer1.textHeight;
- strVisualTracer1.setTextFormat(strFt1);
- _clip.createTextField(“strVisualTracer2”, _clip.getNextHighestDepth(), 10, 50, 10, 10);
- var strVisualTracer2:TextField = _clip.strVisualTracer2;
- strVisualTracer2.selectable = false;
- strVisualTracer2.autoSize = “left”;
- strVisualTracer2.text = “Please report this error to technical support :”;
- strVisualTracer2.setTextFormat(strFt2);
- _clip.createTextField(“strMsg”, clip.getNextHighestDepth(), 30, 90, wWindow-60, _hWindow-110);
- var strMsg:TextField = _clip[“strMsg”];
- strMsg.border = true;
- strMsg.borderColor = 0×000000;
- strMsg.background = true;
- strMsg.backgroundColor = 0xFFFFFF;
- strMsg.selectable = true;
- strMsg.wordWrap = true;
- strMsg.mouseWheelEnabled = true;
- strMsg.setTextFormat(strFt3);
- strMsg.type = “dynamic”;
- _clip.close.onPress = Relegate.create(VisualTracer, closeWindow);
- drag = true;
- }
- private static function drawRectangle(mc:MovieClip, color:Number, lineColor:Number, x:Number, y:Number, w:Number, h:Number) {
- mc.beginFill(color, 100);
- mc.lineStyle(1, lineColor, 100);
- mc.moveTo(x, y);
- mc.lineTo(x+w, y);
- mc.lineTo(x+w, y+h);
- mc.lineTo(x, y+h);
- mc.lineTo(x, y);
- mc.endFill();
- }
- /**
- * Allow the user to move the window
- * @param w Number represents the window’s width
- * @param w Number represents the window’s height
- */
- private static function moveWindow(w:Number, h:Number) {
- _clip.startDrag(false, 0, 0, Stage.width
w, Stage.heighth); - _clip._alpha = 50;
- }
- private static function releaseWindow() {
- _clip.stopDrag();
- _clip._alpha = 100;
- }
- private static function closeWindow() {
- dispatchEvent({type:“onClose”, target:VisualTracer});
- }
- /**
- * Getters & Setters
- */
- public static function set drag(b:Boolean) {
- _clip.barre.onPress = (b) ? Relegate.create(VisualTracer, moveWindow, wWindow, hWindow) : undefined;
- _clip.barre.onRelease = (b) ? Relegate.create(VisualTracer, releaseWindow) : undefined;
- _clip.barre.onReleaseOutside = (b) ? Relegate.create(VisualTracer, releaseWindow) : undefined;
- }
- public static function get cible():MovieClip {
- return _support;
- }
- /**
- * Destructor
- */
- public static function destroy():Void {
- delete (_support);
- delete (_arrMsg);
- }
- /**
- * Display the class name
- */
- public static function toString(Void):String {
- return “lib.tool.VisualTracer”;
- }
- }
Que l’on peut utiliser à loisir de cette facon :
- import com.loctar.utils.VisualTracer;
- VisualTracer.init(this);
- /**
- * Optional : VisualTracer allows you to track two kinds of events
- */
- VisualTracer.addEventListener(“onAlert”, alertMsg);
- VisualTracer.addEventListener(“onClose”, alertMsg2);
- function alertMsg() {
- trace(“my first alert”);
- }
- function alertMsg2() {
- VisualTracer.closed = true;
- }
- var i:Number = 2
- VisualTracer.alert(“my value : “+i);
Aperçu :

Pour une utilisation optimale de cette classe je vous conseille de l’utiliser conjointement à la classe Debug créée par Lalex (depuis un certain temps déjà) qui vous permettra de faire un dump de vos données.
Il faudra cependant faire une petite modification en rendant publique la méthode statique : dumpToString() ...
- import com.loctar.utils.VisualTracer;
- import com.lalex.utils.Debug;
- VisualTracer.init(this);
- VisualTracer.addEventListener(“onAlert”, alertMsg);
- VisualTracer.addEventListener(“onClose”, alertMsg2);
- function alertMsg() {
- trace(“my first alert”);
- }
- function alertMsg2() {
- VisualTracer.hide();
- }
- var obj:Object = new Object()
- obj.a = new Array(1,2,3,4,5);
- obj.b=“test”;
- VisualTracer.alert(Debug.dumpToString(obj));
Bref, une petite classe toute simple qui peut toutefois en dépanner certains !
Télécharger VisualTracer-1.zip
Note : Utilisation de la classe Relegate de Tekool (Delegation avec passage de paramètres)
Si vous avez apprécié cet article, s'il vous plait, prenez le temps de laisser un commentaire ou de souscrire au flux afin de recevoir les futurs articles directement dans votre lecteur de flux.

Je crois que t’as fait une faute d’orthographe, ligne 79.
Trop fort ce Loic …
moi j’y comprends rien du tout …