Suivi et surveillance (FireDAC)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Débogage et support (FireDAC)


Cette rubrique vous explique comment utiliser les capacités de suivi et de surveillance de FireDAC. Ces dernières constituent l'essentiel de l'outil de débogage d'application de FireDAC et déterminent comment une application communique avec une base de données.

Présentation

La sortie de suivi FireDAC est le journal détaillé des communications entre l'application FireDAC et le logiciel de base de données. Ce journal comprend les numéros de référence, l'horodatage, les appels à l'API, le SQL envoyé à une base de données, les données échangées avec les valeurs des paramètres et des champs, les erreurs et les avertissements, ainsi que le rapport d'environnement du SGBD (Système de gestion de bases de données ou DBMS).

FireDAC offre trois méthodes pour générer la sortie de suivi. Toutes sont contrôlées par les différents composants et les différentes valeurs du paramètre de connexion MonitorBy :

Composant Valeur MonitorBy Description
TFDMoniFlatFileClientLink FlatFile Génère la sortie de suivi d'un fichier texte plat. Lorsque l'application a terminé, la liste des fichiers de suivi générés s'affiche.
TFDMoniRemoteClientLink Remote Génère la sortie de suivi de l'utilitaire FDMonitor et autorise la surveillance de l'application. FDMonitor doit être en cours d'exécution pour activer une sortie de suivi.
TFDMoniCustomClientLink Custom Génère la sortie de suivi d'un gestionnaire d'événement personnalisé. Les applications doivent utiliser le gestionnaire d'événement OnOutput pour produire une sortie de suivi personnalisée.

Les composants moniteurs sont des "singleton" qui se réfèrent à l'instance unique de l'implémentation du programme de suivi correspondant. Toutes les connexions pour lesquelles la sortie de suivi est activée utilisent le même programme de suivi. Une seule sortie est donc produite pour toutes les connexions.

Contrôle du suivi

Pour activer la sortie de suivi sur une connexion :

  1. Déposez un composant TFDMoniXxxxClientLink sur une fiche.
  2. Définissez sa propriété Tracing sur True.
  3. Ajoutez le paramètre de définition de la connexion MonitorBy=Xxx.

Le paramètre MonitorBy associe la définition à une méthode de suivi spécifique et devient accessible en lecture seule après la création de la première connexion pour cette définition. MonitorBy doit être défini de manière permanente.

La propriété TFDMoniXxxxClientLink.Tracing doit être définie sur True avant d'ouvrir une première connexion avec MonitorBy=Xxx. Par la suite, pour désactiver ou activer temporairement la sortie de suivi sur toutes les connexions, utilisez la propriété Tracing du composant TFDMoniXxxxClientLink.

Remarque : TFDMoniXxxxClientLink doit précéder TFDConnection dans le module de données ou dans l'ordre de création de la fiche.

Pour désactiver initialement la sortie de suivi sur une connexion spécifique, utilisez MonitorBy=Xxx. Pour désactiver ou activer temporairement la sortie de suivi sur une connexion spécifique, définissez la propriété TFDConnection.ConnectionIntf.Tracing. Sachez que la propriété ConnectionIntf est accessible uniquement après avoir établi la connexion.

Par exemple :

 
FDMoniFlatFileClientLink1.Tracing := True;

with FDConnection1.Params do begin
  Clear;
  Add('DriverID=SQLite');
  Add('Database=c:\test.sdb');
  Add('MonitorBy=FlatFile');
end;

FDConnection1.Connected := True;
...
// disable trace output for connection
FDConnection1.ConnectionIntf.Tracing := False;
...
// enable trace output for connection
FDConnection1.ConnectionIntf.Tracing := True;

Contenu du suivi

Pour contrôler le contenu du suivi, utilisez la propriété TFDMoniXxxxClientLink.EventKinds. Voici un exemple de sortie de suivi :

     1385 15:47:14.093     >> Fetch [ATable="FDQA_FK_tab", Command="SELECT AF.fk_id, AF.id, AT1.f1, AT1.f2
 FROM FDQA_FK_tab AF LEFT JOIN FDQA_tabwithpk AT1 ON AF.fk_id=AT1.f1"]
     1386 15:47:14.093          . sqlite3_column_type [stmt=$0F16E6B8, iCol=0, Result=SQLITE_NULL]
     1387 15:47:14.093          . sqlite3_column_type [stmt=$0F16E6B8, iCol=1, Result=SQLITE_INTEGER]
     1388 15:47:14.093          . sqlite3_column_int64 [stmt=$0F16E6B8, iCol=1, AValue^=2]
     1389 15:47:14.093          . sqlite3_column_type [stmt=$0F16E6B8, iCol=2, Result=SQLITE_NULL]
     1390 15:47:14.093          . sqlite3_column_type [stmt=$0F16E6B8, iCol=3, Result=SQLITE_NULL]
     1391 15:47:14.093          . sqlite3_step [stmt=$0F16E6B8]
     1392 15:47:14.093          . sqlite3_column_type [stmt=$0F16E6B8, iCol=0, Result=SQLITE_INTEGER]
     1393 15:47:14.093          . sqlite3_column_int64 [stmt=$0F16E6B8, iCol=0, AValue^=2]
     1394 15:47:14.093          . sqlite3_column_type [stmt=$0F16E6B8, iCol=1, Result=SQLITE_INTEGER]
     1395 15:47:14.093          . sqlite3_column_int64 [stmt=$0F16E6B8, iCol=1, AValue^=3]
     1396 15:47:14.093          . sqlite3_column_type [stmt=$0F16E6B8, iCol=2, Result=SQLITE_INTEGER]
     1397 15:47:14.093          . sqlite3_column_int64 [stmt=$0F16E6B8, iCol=2, AValue^=2]
     1398 15:47:14.093          . sqlite3_column_type [stmt=$0F16E6B8, iCol=3, Result=SQLITE_TEXT]
     1399 15:47:14.093          . sqlite3_column_text [stmt=$0F16E6B8, iCol=3, bytes=4]
     1400 15:47:14.093          . sqlite3_step [stmt=$0F16E6B8]
     1401 15:47:14.093          . profile [SQL="SELECT AF.fk_id, AF.id, AT1.f1, AT1.f2
 FROM FDQA_FK_tab AF LEFT JOIN FDQA_tabwithpk AT1 ON AF.fk_id=AT1.f1", time=0]
     1402 15:47:14.093     << Fetch [ATable="FDQA_FK_tab", Command="SELECT AF.fk_id, AF.id, AT1.f1, AT1.f2
 FROM FDQA_FK_tab AF LEFT JOIN FDQA_tabwithpk AT1 ON AF.fk_id=AT1.f1", RowsAffected=2]

Où :

  • Le premier numéro (1385 à 1402) est le numéro de ligne. Il permet de se référer à la ligne exacte.
  • L'horodatage correspond à l'heure locale à laquelle la ligne a été générée. Il peut être utilisé pour mesurer la performance.
  • Ces paramètres affichent le texte SQL de la commande et d'autres informations :
    • >> Xxxx -- démarrage d'une opération FireDAC
    • << Xxxx -- fin d'une opération FireDAC
  • sqlite3_xxx -- appel à l'API du SGBD (SQLite) visant à exécuter une opération FireDAC.

Contrôle de la sortie

Plusieurs composants contrôlent la sortie.

Sortie de suivi de fichier plat

Le composant TFDMoniFlatFileClientLink contrôle la sortie de fichier texte plat. Par défaut, le nom du fichier de suivi est automatiquement généré dans le dossier TEMP de votre système. A la fin de l'exécution, une application FireDAC affiche la liste des fichiers de suivi générés.

Pour contrôler la sortie, utilisez les propriétés suivantes :

  • FileName -- nom du fichier de suivi. Il est possible d'utiliser des variables d'environnement de type $(name). Le nom par défaut est $(TEMP)\traceN.txt.
  • FileEncoding -- encodage du fichier de suivi. L'encodage par défaut est ANSI.
  • FileAppend -- lorsque la valeur est True, le fichier de suivi existant est ajouté. Sinon, il est écrasé à chaque nouvelle exécution.
  • FileColumns -- les colonnes à inclure dans le fichier texte.

Sortie de suivi à distance

Le composant TFDMoniRemoteClientLink contrôle la sortie de suivi à distance. Utilisez l'utilitaire FDMonitor pour voir la sortie de suivi. Pour le suivi, FireDAC utilise le protocole de transport TCP/IP, de sorte que FDMonitor et l'application peuvent être exécutés sur différents systèmes dans un réseau. Cela s'applique également au développement macOS : l'application peut être exécutée sur le Mac pendant que FDMonitor s'exécute dans une fenêtre Windows.

Pour contrôler la sortie, utilisez les propriétés suivantes :

  • Host -- adresse IP de la fenêtre FDMonitor. L'adresse par défaut est localhost.
  • Port-- port IP d'écoute utilisé par FDMonitor. Par défaut, il s'agit du port 8050.
  • Timeout -- nombre maximal de ms autorisées pour établir une connexion avec FDMonitor.

Sortie de suivi personnalisée

Le composant TFDMoniCustomClientLink peut être utilisé pour produire une sortie de suivi personnalisée. Pour ce faire, l'application doit définir un gestionnaire d'événement OnOutput.

Remarque : N'insérez pas d'appel à Application.ProcessMessages dans le gestionnaire d'événement OnOutput, cela pouvant réduire considérablement les performances et créer des problèmes (une nouvelle entrée dans FireDAC ne serait pas prise en charge).

Surveillance

L'utilitaire FDMonitor prend également en charge la surveillance de l'état des objets FireDAC. Les développeurs peuvent utiliser cette fonctionnalité pour activer la surveillance de leurs propres objets. Pour de plus amples informations, voir la démo FireDAC\Samples\Moni Layer\Main.

Vérification du texte de la commande SQL

Utilisez les capacités de suivi ci-après pour voir le texte de la commande SQL tel qu'il sera envoyé vers une base de données :

  • TFDQuery.Text -- renvoie le texte de la commande SQL tel qu'il sera envoyé vers une base de données.
  • EFDDBEngineException.SQL, Params -- renvoie le texte de la commande SQL ayant déclenché une exception.

Vérification des lignes de l'ensemble de données

Vous pouvez vider les lignes de l'ensemble de données en utilisant l'une des méthodes suivantes :

  • DataSet.GetRow.DumpRow(True) -- renvoie le texte correspondant à la ligne de l'ensemble de données en cours, y compris toutes les valeurs de champs et les noms des champs.
  • DataSet.GetRow.DumpRow() -- renvoie le texte correspondant à la ligne de l'ensemble de données en cours, y compris toutes les valeurs de champs.
  • DataSet.Table.Rows[i].DumpRow() -- renvoie le texte correspondant à une ligne aléatoire de l'ensemble de données.

Voir aussi

Exemples