2011-08-25 3 views
4

J'ai précédemment demandé this question lorsque je voyais une exception de pointeur null. Dans ce cas, il s'est avéré que ce que je voyais était en fait un bug dans IronPython.Ironpython: débogage d'une exception de référence null

Maintenant, je suis récemment tombé sur cette erreur à nouveau lorsque vous utilisez une bibliothèque tierce partie (écrit en C#). La bibliothèque est la bibliothèque DotSpatial et il s'avère que j'ai accidentellement créé une condition dans mon code IronPython qui a conduit à un effet secondaire dans la rupture de la méthode DotSpatial. Pour référence à l'appel et le message d'erreur sont:

>>> myScheme.CreateCategories(myLayer.DataSet.DataTable) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
SystemError: Object reference not set to an instance of an object. 

Cela a été particulièrement difficile à déboguer parce que le problème n'a pas été avec l'objet myScheme ou DataTable je passais à sa méthode, mais avec une autre propriété de myScheme que j'avais mal défini, que je ne savais même pas que CreateCategories accédait.

Pour comprendre ce qui n'allait pas ici, j'ai dû lire le DotSpatial source code. Bien que je n'ai pas trop de mal à faire cela, je me demandais s'il y avait des moyens plus faciles de déboguer une telle erreur? Ou suis-je coincé avec de mauvais messages d'erreur parce que je travaille avec IronPython et une bibliothèque tierce?

Répondre

3

Deux commutateurs de ligne de commande permettent à IronPython d'afficher plus d'informations d'exception: -X:ExceptionDetail et -X:ShowClrExceptions. L'un d'entre eux ou les deux devraient vous donner la trace complète de la pile à l'endroit où s'est produit le NullReferenceException.

+0

Génial. Je viens de passer une heure à essayer de comprendre comment faire. Merci. – lesscode

Questions connexes