Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flex
Flex Forum d'entraide sur la programmation Adobe Flex : applications Internet riches (RIA)
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 03/11/2011, 18h29   #1
Invité de passage
 
Homme Julien
Étudiant
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 0
Points : 0
Par défaut Bug sur un appel de fonction

Bonsoir à vous,
je développe une application web avec l'API ArcGIS for flex (1.3).
Cependant je rencontre un problème assez inédit :

Mon code bloque sur l'appel d'une fonction avec pour unique paramètre une variable String.

Je précise que cette variable String a été testée :
- pas de caractère invisible.
- type correct
surtout le contenu de cette String est celui attendu.

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
private function getServices():Array{ 
	    	var array:Array = new Array();
	    	var layer:Layer;
	    	var hasGraphicsLayer:Boolean = false;
 
	    	for(var i:Number = 0; i<this.configData.configMap.length ;i++){
	    		try{
	    			layer = getMainServiceLayer(this.configData.configMap[i].label);
	    		}catch (e:Error){
	    			Alert.show(e.message);
	    		}
	    		if(layer.visible) {
	    			if(layer is GraphicsLayer) {
	    				hasGraphicsLayer = true;
	    			} else {
	    				array.push(this.configData.configMap[i]);
	    			}
	    		}
	    	}
 
	    	if(hasGraphicsLayer) array.push({label:dynamicLayerGroupName}) ;
 
	    	return array;
	    }
Cette fonction fait appel à la fonction qui plante : getMainServiceLayer(st:String) qui a pour code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
private function getMainServiceLayer(st:String):Layer{
	var layer:Layer = null;
	  for (var i:Number =0;i<theMap.layerIds.length;i++)
	   {
	   	if (theMap.layerIds[i].toString() == st)
	   	{
	   		layer = theMap.getLayer(theMap.layerIds[i]);
	   		break;
	   	}
	     }
	  return layer;
}
J'ai bien sûr essayé des Alert à chaque étape, rien ni fait le code s'arrête mystérieusement lors du dernier tour de l'appel de la fonction getMainServiceLayer(st:String). Après avoir essayé toutes sortes d'Alert, j'ai décidé de placer un try / catch sur l'appel de la fonction pour comprendre et récupérer l'erreur.
Résultat, le try est exécuté en buggant mais ne lève pas d'erreur dans le catch.

Quelqu'un aurait-il une idée de ce que cela pourrait-il être ?
Quelqu'un a déjà rencontré ce bug ?

Merci d'avance !
jsenac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 21h24   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 279
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 279
Points : 2 327
Points : 2 327
Bonjour,

dans ta fonction getMainServiceLayer, tu peux ne jamais tomber dans le if (?) et donc retourner null. Dans ce cas là, ton

échouera (je pense mais à confirmer). Pas de message d'erreur ?
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 21h39   #3
Invité de passage
 
Homme Julien
Étudiant
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 0
Points : 0
Bonsoir,

d'abord merci pour la réponse.
Pour ta remarque, suite aux Alert que j'ai posé, j'ai pu voir que le code accède au if à tous les tours de boucles, sauf le dernier.
Du coup, ne sortant jamais de la boucle for, la fonction ne retourne rien.
Et la difficulté du bug est justement l'absence totale d'erreur.
Pas d'erreur de compilation (hors sujet ici), pas d'erreur de type "pointe sur un objet nul", pas d'overflow, rien. Et ce même avec le try / catch ce qui est encore plus étonnant
jsenac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 22h05   #4
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 279
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 279
Points : 2 327
Points : 2 327
question naive mais es tu sur d'utiliser la version debug du player Flash et si oui de tester un .swf possédant des informations de debug (ie: compilée avec l'option debug à true) ?
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 22h51   #5
Invité de passage
 
Homme Julien
Étudiant
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 0
Points : 0
Alors j'ai oublié de préciser, l'utilisation du debug n'est pas possible (selon moi) puisqu'en fait l'application qui est victime de ce problème est lancée par une autre application flex, donc le lien est difficilement faisable.
Mais je ne pense que cela ne change pas grand chose, car je me trompe peut-être mais, ce qui se retrouve normalement dans le catch d'une structure try / catch, n' est pas censé être ce qui se retrouve dans les lignes du mode debug ?
jsenac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 23h18   #6
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 279
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 279
Points : 2 327
Points : 2 327
Citation:
Envoyé par jsenac Voir le message
Alors j'ai oublié de préciser, l'utilisation du debug n'est pas possible (selon moi) puisqu'en fait l'application qui est victime de ce problème est lancée par une autre application flex, donc le lien est difficilement faisable.
pourquoi dans ce cas ne pas lancer l'autre application en mode debug ?

Citation:
Envoyé par jsenac Voir le message
ce qui se retrouve normalement dans le catch d'une structure try / catch, n' est pas censé être ce qui se retrouve dans les lignes du mode debug ?
je te conseille de remplacer les Alert.show (rébarbatifs à écrire et nécessitant l'import de la classe Alert) et s’affichant "à l'envers" puisque tu verras le dernier Alert lancé avant le premier, par des trace qui eux ne nécessitent pas d'import et surtout apparaissent dans les infos de debug. Concernant, le try/catch, certes tu peux faire un trace(e) par exemple mais dans ton cas de figure il est fort à parier que tu as une erreur ne se lançant pas dans ce bloc selon tes explications.

Si tu ne veux ou ne sais pas configurer le lancement en mode debug sous FB4, tu peux download la version projector du player flash sur le site d'abode. Cette version t'affichera les traces dans un fichier et les runtime errors.

@+
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 07h56   #7
Membre habitué
 
Homme Nicolas
Développeur informatique
Inscription : juillet 2007
Messages : 229
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : Luxembourg

Informations professionnelles :
Activité : Développeur informatique
Secteur : Finance

Informations forums :
Inscription : juillet 2007
Messages : 229
Points : 137
Points : 137
Bonjour,

tu peux aussi utiliser le module fireBug et flashFireBug dans firefox pour voir en live (Sans mode débug) les traces de ton application.

C'est très utile!!

Good Luck
npirard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 08h55   #8
Invité de passage
 
Homme Julien
Étudiant
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 0
Points : 0
Merci à vous pour ces informations, je vais de ce pas mettre en œuvre vos conseils !
jsenac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 09h37   #9
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 279
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 279
Points : 2 327
Points : 2 327
Bonjour,

j'ai oublié de préciser que si tu configures le mode debugging de FB4, tu verras les traces dans FB4 aussi
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/11/2011, 11h56   #10
Invité de passage
 
Homme Julien
Étudiant
Inscription : novembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2011
Messages : 5
Points : 0
Points : 0
Un grand merci ! grace à vous, j'ai pu récupérer une erreur et changer ce qui n'allait pas. Ca provient d'une chose mal faite dans l'API ArcGis (un attribut name se transforme en id) du coup on finissant par pointer sur une variable nulle.

Merci encore !
jsenac 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 05h55.


 
 
 
 
Partenaires

Hébergement Web