Partager via


Procédure de débogage des objets de base de données

S’applique à : SQL Server

SQL Server prend en charge le débogage d’objets Transact-SQL et Common Language Runtime (CLR) dans la base de données. Les principaux atouts du débogage dans SQL Server sont la facilité d’installation et d’utilisation, et l’intégration du débogueur SQL Server avec le débogueur Microsoft Visual Studio. En outre, le débogage fonctionne sur plusieurs langages. Les utilisateurs peuvent effectuer de façon transparente un pas à pas détaillé dans les objets CLR à partir de Transact-SQL et vice versa. Le débogueur Transact-SQL dans SQL Server Management Studio ne peut pas être utilisé pour déboguer des objets de base de données managés, mais vous pouvez déboguer les objets en utilisant les débogueurs de Visual Studio. Le débogage d'objets de base de données managés dans Visual Studio prend en charge toutes les fonctionnalités de débogage classiques, par exemple, les instructions "step into" et "step over" dans les routines qui s'exécutent sur le serveur. Les débogueurs peuvent définir des points d'arrêt, inspecter la pile des appels, inspecter les variables et modifier des valeurs de variables en cours de débogage.

Remarque

Visual Studio .NET 2003 ne peut pas être utilisé pour le débogage ou la programmation de l’intégration du CLR. SQL Server inclut le .NET Framework préinstallé et Visual Studio .NET 2003 ne peut pas utiliser les assemblys .NET Framework 2.0.

Autorisations et restrictions de débogage

Le débogage est une opération hautement privilégiée. Par conséquent, seuls les membres du rôle serveur fixe sysadmin sont autorisés à déboguer dans SQL Server.

Les restrictions suivantes s'appliquent dans le cadre du débogage :

  • Le débogage des routines CLR est restreint à une instance de débogueur à la fois. Cette limitation s'applique parce que l'exécution de la totalité du code CLR est gelée lorsqu'un point d'arrêt est atteint et qu'elle ne reprend que lorsque le débogueur continue à partir du point d'arrêt. Toutefois, vous pouvez continuer à déboguer Transact-SQL dans d’autres connexions. Bien que le débogage Transact-SQL ne gèle pas d’autres exécutions sur le serveur, il peut provoquer la mise en attente d’autres connexions par le maintien d’un verrou.

  • Les connexions existantes ne peuvent pas être déboguées ; seules les nouvelles connexions peuvent l’être, puisque SQL Server requiert des informations sur l’environnement du client et du débogueur pour que la connexion puisse être établie.

En raison des restrictions précitées, nous recommandons que le débogage du code Transact-SQL et CLR soit effectué sur un serveur de test et non sur un serveur de production.

Vue d’ensemble

Le débogage dans SQL Server suit un modèle « par connexion ». Un débogueur peut détecter et déboguer des activités uniquement sur la connexion cliente à laquelle il est attaché. Comme les fonctionnalités du débogueur ne sont pas limitées par le type de connexion, il est possible de déboguer à la fois des TDS (Tabular Data Stream) et des connexions HTTP. Toutefois, SQL Server n’autorise pas le débogage des connexions existantes. Le débogage prend en charge toutes les fonctionnalités de débogage communes dans les routines qui s'exécutent sur le serveur. L’interaction entre un débogueur et SQL Server s’effectue par le biais d’un modèle COM (Component Object Model) distribué.

Pour plus d’informations et de scénarios sur le débogage de procédures stockées gérées, de fonctions, de déclencheurs, de types définis par l’utilisateur et d’agrégats, consultez Débogage de la base de données d’intégration CLR SQL Server dans la documentation Visual Studio.

Le protocole réseau TCP/IP doit être activé sur l’instance SQL Server afin d’utiliser Visual Studio pour le développement et le débogage distants. Pour plus d’informations sur l’activation du protocole TCP/IP sur le serveur, consultez Configurer des protocoles clients.

Étapes de débogage

Procédez comme suit pour déboguer un objet de base de données CLR dans Microsoft Visual Studio :

  1. Ouvrez Microsoft Visual Studio et créez un projet SQL Server. Vous pouvez utiliser l’instance SQL LocalDB fournie avec Visual Studio.

  2. Créez un type de CLR SQL (C#) :

    1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet, puis sélectionnez Ajouter, Nouvel élément….
    2. Dans la fenêtre Ajouter un nouvel élément, sélectionnez procédure stockée SQL CLR C#, Fonction définie par l’utilisateur SQL CLR C#, Type défini par l’utilisateur SQL CLR C#, Déclencheur SQL CLR C#, Agrégat SQL CLR C# ou Classe.
    3. Spécifiez un nom pour le fichier source du nouveau type, puis sélectionnez Ajouter.
  3. Ajoutez le code du nouveau type à l'éditeur de texte. Pour obtenir un exemple de code pour une procédure stockée, consultez la section Exemple correspondante plus loin dans cet article.

  4. Ajoutez un script qui teste le type :

    1. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nœud du projet, puis sélectionnez Ajouter, Script….
    2. Dans la fenêtre Ajouter un nouvel élément, sélectionnez Script (Pas dans le build) et spécifiez un nom, tel que Test.sql. Cliquez sur le bouton Ajouter.
    3. Dans l’Explorateur de solutions, double-cliquez sur le nœud Test.sql pour ouvrir le fichier source du script de test par défaut.
    4. Ajoutez à l’éditeur de texte un script de test (qui appelle le code à déboguer). Consultez l’exemple dans la section suivante pour obtenir un exemple de script.
  5. Placez un ou plusieurs points d'arrêt dans le code source. Cliquez avec le bouton droit sur une ligne de code dans l’éditeur de texte sur la fonction ou la routine que vous souhaitez déboguer. Sélectionnez Point d’arrêt, Insérer un point d’arrêt. Le point d'arrêt est ajouté et la ligne de code est affichée en rouge.

  6. Dans le menu Débogage, sélectionnez Démarrer le débogage pour compiler, déployer et tester le projet. Le script de test dans Test.sql est exécuté et l’objet de base de données managé est invoqué.

  7. Lorsque la flèche jaune qui désigne le pointeur d’instruction apparaît au niveau du point d’arrêt, l’exécution du code est suspendue. Vous pouvez ensuite déboguer votre objet de base de données managé :

    1. Utilisez Pas à pas à partir du menu Débogage pour faire avancer le pointeur d’instruction vers la ligne de code suivante.
    2. Utilisez la fenêtre Variables locales pour observer l’état des objets actuellement mis en surbrillance par le pointeur d’instruction.
    3. Ajoutez des variables à la fenêtre Espion. Vous pouvez observer l’état des variables espionnées tout au long de la session de débogage, même lorsque la variable ne figure pas dans la ligne de code actuellement mise en surbrillance par le pointeur d’instruction.
    4. Sélectionnez Continuer dans le menu Déboguer pour faire avancer le pointeur d’instruction jusqu’au point d’arrêt suivant ou pour terminer l’exécution de la routine s’il n’y a plus de points d’arrêt.

Exemple de code

L’exemple suivant retourne la version de SQL Server à l’appelant.

using System.Data.SqlClient;
using Microsoft.SqlServer.Server;

public class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void GetVersion()
    {
        using (var connection = new SqlConnection("context connection=true"))
        {
            connection.Open();
            var command = new SqlCommand("select @@version", connection);
            SqlContext.Pipe.ExecuteAndSend(command);
        }
    }
}

Exemple de script de test

Le script de test suivant montre comment appeler la procédure stockée GetVersion définie dans l’exemple précédent.

EXEC GetVersion  

Étapes suivantes

Pour plus d’informations sur le débogage de code managé à l’aide de Visual Studio, consultez la documentation Débogage de code managé de Visual Studio.

Pour plus d’informations, consultez Concepts de programmation pour l’intégration du CLR (Common Language Runtime).