2009-10-05 3 views
3

Nous recevons tous "TypeError # 1009 Impossible d'accéder à une propriété ou une méthode de référence d'objet nul" de temps en temps - pas grave, mais parfois frustrant de déboguer.AS3 -TypeError # 1009 - un moyen facile de trouver * quelle * référence d'objet est nulle?

Flash vous donne la pile d'appel (qui est un début), mais laisse à vous de déterminer où l'objet nul est - est-il possible de trouver exactement quelle référence renvoie l'erreur?

Compte tenu de la fonction suivante (erreur sujette):

function nullObjectReferenceError():void 
    { 
     var obj:Object; 
     var prop:* = obj.nonExistentProperty; 
    } 

Plutôt que la pile d'appel de la TypeError, j'aimerais tracer quelque chose comme: "Impossible d'accéder à une propriété ou méthode d'un nul référence d'objet à obj.nonExistentProperty "- Est-ce encore possible?

Répondre

4

Si vous cochez Autoriser le débogage sous Paramètres de publication dans l'EDI Flash, le numéro de ligne dans votre code provoque l'erreur.

+0

Ah - se rapprocher ... ne peut toujours pas obtenir l'objet, mais le numéro de ligne le rend beaucoup plus facile à trouver. Savez-vous si "Permit Debugging" a des conséquences sur la sécurité ou la performance? – Reuben

+0

Je marque celui-ci comme correct - il semble être la chose la plus proche d'une solution qui est disponible. – Reuben

+0

Il ne doit être utilisé que pendant le test/débogage. – Marco

0

TypeError ne vous donnera plus d'informations si vous l'attrapez. Pour autant que je sache, il n'existe pas de moyen connu pour réaliser ceci (c'est-à-dire dont l'objet a lancé l'erreur).

Votre meilleur pari sera de définir un point d'arrêt au début de la fonction et d'étudier les variables manuellement. C'est ce que je fais, et ça marche plutôt bien pour moi.

+0

que je pensais - j'utiliser TextMate comme éditeur de code pour que le réglage des points d'arrêt est un peu Checklist - j'espérais une autre solution – Reuben

2

La solution évidente est d'arrêter d'utiliser un tel code générique sujet aux erreurs en premier lieu. Vous ne devriez jamais utiliser le type '*' et ne devriez presque jamais utiliser le type 'Object'.

Pour l'attraper à l'exécution, vous pouvez toujours dire:

if(obj == null) 
    throw new Error("null obj passed in!!"); 

if(obj.nonExistentProperty == null) 
    throw new Error("obj doesn't have the prop!! the obj was: "+obj); 
+0

en fait davr, je demandais parce que je suis souvent appelé à déboguer du code écrit par d'autres développeurs ... mais c'est généralement un bon conseil. – Reuben

Questions connexes