Afficher le numéro de ligne d'une exception dans la console C#

Lors de la gestion des exceptions en C#, il est courant d'utiliser des blocs try-catch. Parfois, au lieu d'afficher une boîte de dialogue qui pourrait perturber l'utilisateur, on souhaite simplement imprimer les détails de l'exception dans la console pour faciliter le débogage. Le défi principal réside dans la localisation rapide de la source de l'erreur, notamment en obtenant le numéro de ligne où l'exception s'est produite.

Voici un exemple de code qui génère une exception de division par zéro et affiche la trace complète dans la console :


using System;

namespace ConsoleDemo
{
    class Programme
    {
        static void Main(string[] args)
        {
            int denominateur = 0;
            try
            {
                int resultat = 100 / denominateur;
            }
            catch (Exception erreur)
            {
                string traceComplete = erreur.StackTrace;
                Console.WriteLine(traceComplete);
            }
        }
    }
}

La sortie dans la console ressemble à ceci :
À ConsoleDemo.Programme.Main(String[] args) dans C:\chemin\vers\Programme.cs:ligne 12
Cela indique l'emplacement exact de l'exception, incluant le fichier et le numéro de ligne (12 ici). L'information la plus utile est souvent le nom du fichier et le numéro de ligne, par exemple "Programme.cs:ligne 12".

Pour extraire cette information de manière fiable, même dans différents environnements linguistiques, on peut rechercher le dernier antislash ("\") dans la chaîne de trace. Voici une méthode améliorée :


using System;

namespace ConsoleDemo
{
    class Programme
    {
        static void Main(string[] args)
        {
            int denominateur = 0;
            try
            {
                int resultat = 100 / denominateur;
            }
            catch (Exception erreur)
            {
                string traceComplete = erreur.StackTrace;
                int positionDernierSlash = traceComplete.LastIndexOf("\\");
                if (positionDernierSlash >= 0)
                {
                    string extrait = traceComplete.Substring(positionDernierSlash + 1);
                    Console.WriteLine(extrait);
                }
            }
        }
    }
}

Cela affiche directement "Programme.cs:ligne 12". Si l'on souhaite également afficher le message d'exception, on peut combiner les informations :


using System;

namespace ConsoleDemo
{
    class Programme
    {
        static void Main(string[] args)
        {
            int denominateur = 0;
            try
            {
                int resultat = 100 / denominateur;
            }
            catch (Exception erreur)
            {
                string traceComplete = erreur.StackTrace;
                int positionDernierSlash = traceComplete.LastIndexOf("\\");
                string detailLigne = positionDernierSlash >= 0 ? traceComplete.Substring(positionDernierSlash + 1) : "Ligne inconnue";
                Console.WriteLine($"Détail de l'exception : {detailLigne} - Message : {erreur.Message}");
            }
        }
    }
}

La sortie devient :
Détail de l'exception : Programme.cs:ligne 12 - Message : Tentative de division par zéro.
Cette approche permet une identification rapide et claire des erreurs dans les applications console, sans dépendre des paramètres régionaux du système.

Étiquettes: C# .NET exception handling StackTrace console output

Publié le 10 juin à 22h19