10 nov. 2012

[astuce] Lever les exceptions NullReferenceException de l'évènement Form.Load du débogueur de Visual Studio 2010

Par défaut, Microsoft Visual Studio 2010 ne capture pas le débogage de l'exception NullReferenceException si cette exception est levée depuis le bloc de script de l'évènement Form.Load. En effet, l'exécution en débug ne révèle pas l'exception, même si un try-catch capture effectivement l'exception. Donc si on teste une boîte de dialogue qui possède du code dans le Load qui fait appel à une variable qui peut être nulle sans être dans un try-catch, la fenêtre s'affiche sans que l'on remarque l'erreur.

Voici un code d'exemple, où on a volontairement fait appel (ligne 25) à la liste maListe qui n'a pas été initialisée (ligne 19) :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace testException
{
    public partial class Fille : Form
    {
        public Fille()
        {
            InitializeComponent();
        }

        List<int> maListe;

        private void Fille_Load(object sender, EventArgs e)
        {
            try
            {
                foreach (int i in maListe)
                {

                }
            }
            catch (NullReferenceException) { Text = "Exception"; return; }

            Text = "Completed";
        }
    }
}



Pour corriger ce comportement par défaut, il suffit de se rendre dans le menu "Déboguer > Exceptions..." et de cocher la case System.NullReferenceException.
Cochez la case System.NullReferenceException
 Re-déboguez le projet, et vous obtiendrez enfin la capture de l'erreur :

Le débogueur de VS 2010 à capturé NullReferenceException