Sous-routines pthdb_session_committed

Objectif

Facilite l'examen et la modification des données d'objet de la bibliothèque pthread de l'application à unités d'exécution multiples.

Bibliothèque

bibliothèque de débogage pthread (libpthdebug.a)

Syntaxe

#include <sys/pthdebug.h>

int pthdb_session_committed (pthdb_session_t  session,
                             char            ** name);
int pthdb_session_concurrency (pthdb_session_t  session,
                               int             * concurrencyp);
int pthdb_session_destroy (pthdb_session_t  session)
int pthdb_session_flags (pthdb_session_t session,
                         unsigned long long * flagsp)
int pthdb_session_init (pthdb_user_t  user,
                        pthdb_exec_mode_t  exec_mode,
                        unsigned long long  flags,
                        pthdb_callbacks_t * callbacks,
                        pthdb_session_t * sessionp)
int pthdb_session_pthreaded (pthdb_user_t   user,
                             unsigned long long  flags
                             pthdb_callbacks_t * callbacks,
                             char              ** name)
int pthdb_session_continue_tid (pthdb_session_t  session,
                                tid_t           * tidp,
                                int              cmd);
int pthdb_session_stop_tid (pthdb_session_t  session,
                            tid_t            tid);
int pthdb_session_commit_tid (pthdb_session_t  session,
                              tid_t           * tidp,
                              int               cmd);
int pthdb_session_setflags (pthdb_session_t     session,
                            unsigned long long  flags)
int pthdb_session_update (pthdb_session_t  session)

Descriptif

Pour faciliter le débogage de plusieurs processus, la bibliothèque de débogage pthread prend en charge plusieurs sessions, une par processus. Des fonctions sont fournies pour initialiser, détruire et personnaliser le comportement de ces sessions. En outre, des fonctions sont fournies pour interroger les zones globales de la bibliothèque pthread. Toutes les fonctions de la bibliothèque nécessitent un descripteur de session associé à une session initialisée, à l'exception de pthdb_session_init, qui initialise les sessions, et de pthdb_session_pthreaded, qui peut être appelé avant l'initialisation de la session.

pthdb_session_committed indique le nom de symbole d'une fonction appelée une fois que l'opération de validation de mise en attente / suppression de mise en attente est terminée. Ce nom de symbole peut être utilisé pour définir un point d'arrêt afin d'avertir le débogueur lorsque la validation de la mise en attente / de l'annulation de la mise en attente est terminée. Le nom de symbole réel indiqué peut changer à tout moment. Le nom de fonction renvoyé est implémenté dans l'assemblage avec le code suivant:

                ori 0,0, 0         # no-op
                blr                # return to caller

Cela permet au débogueur de remplacer la commande no-op par une instruction d'interruption et de la laisser là en la passant par-dessus. Cette fonction est prise en charge uniquement lorsque l'indicateur PTHDB_FLAG_HOLD est défini.

pthdb_session_concurrency indique le niveau d'accès concurrent de la bibliothèque pthread. Le niveau d'accès concurrent est le rapport M: N, où N est toujours 1.

pthdb_session_destroy indique à la bibliothèque de débogage pthread que le débogueur ou l'application a terminé la session. Cette opération libère toute mémoire associée à la session et permet de réutiliser le descripteur de session.

pthdb_session_setflags modifie les indicateurs d'une session. Avec ces indicateurs, un débogueur peut personnaliser la session. Les indicateurs sont constitués des valeurs suivantes ou-ensemble:

Article Descriptif
PTHDB_FLAG_GPRS Les registres à usage général doivent être inclus dans n'importe quel contexte en lecture ou en écriture, qu'ils soient internes à la bibliothèque ou via des rappels au débogueur.
PTHDB_FLAG_SPRS Les registres spéciaux doivent être inclus dans n'importe quel contexte en lecture ou en écriture, qu'ils soient internes à la bibliothèque ou via des rappels au débogueur.
PTHDB_FLAG_FPRS Les registres à virgule flottante doivent être inclus dans n'importe quel contexte en lecture ou en écriture, qu'ils soient internes à la bibliothèque ou via des rappels au débogueur.
PTHDB_FLAG_REGS Tous les registres doivent être inclus dans n'importe quel contexte en lecture ou en écriture, qu'ils soient internes à la bibliothèque ou via des rappels au débogueur. Cette valeur est équivalente à PTHDB_FLAG_GPRS|PTHDB_FLAG_GPRS|PTHDB_FLAG_GPRS.
PTHDB_FLAG_HOLD Le débogueur utilisera les fonctions de suspension / suppression de la bibliothèque de débogage pthread pour empêcher l'exécution de pthreads. Cet indicateur ne peut pas être utilisé avec PTHDB_FLAG_SUSPEND. Cet indicateur ne doit être utilisé que par les débogueurs.
PTHDB_FLAG_SUSPEND Les applications utilisent les fonctions d'interruption ou de poursuite de la bibliothèque pthread pour empêcher l'exécution de pthreads. Cet indicateur ne peut pas être utilisé avec PTHDB_FLAG_HOLD. Cet indicateur est destiné au mode introspectif et ne doit être utilisé que par les applications.
Remarque: PTHDB_FLAG_HOLD et PTHDB_FLAG_SUSPEND ne peuvent être transmis qu'à la fonction pthdb_session_init . Ni PTHDB_FLAG_HOLD ni PTHDB_FLAG_SUSPEND ne doivent être transmis à pthdb_session_init lors du débogage d'un fichier core.

La fonction pthdb_session_flags obtient les indicateurs en cours pour la session.

La fonction pthdb_session_init indique à la bibliothèque de débogage pthread d'initialiser une session associée à l'unique descripteur utilisateur donné. pthdb_session_init affecte un descripteur de session unique et le renvoie au débogueur. Si le mode d'exécution de l'application est 32 bits, le débogueur doit initialiser exec_mode à PEM_32BIT. Si le mode d'exécution de l'application est 64 bits, le débogueur doit initialiser mode à PEM_64BIT. Les flags sont documentées auparavant avec la fonction pthdb_session_setflags . Le paramètre callback est une liste de fonctions de rappel. (Voir également le fichier d'en-tête pthdebug.h .) La fonction pthdb_session_init appelle la fonction symbol_addrs pour obtenir les adresses de départ des symboles et initialise les adresses de départ de ces symboles dans la bibliothèque de débogage pthread.

pthdb_session_pthreaded indique le nom de symbole d'une fonction appelée après l'initialisation de la bibliothèque pthread. Ce nom de symbole peut être utilisé pour définir un point d'arrêt afin d'avertir le débogueur de l'initialisation d'une session de bibliothèque de débogage pthread et de commencer à utiliser la bibliothèque de débogage pthread pour examiner l'état de la bibliothèque pthread. Le nom de symbole réel indiqué peut changer à tout moment. Cette fonction est la seule fonction de bibliothèque de débogage pthread pouvant être appelée avant l'initialisation de la bibliothèque pthread. Le nom de fonction renvoyé est implémenté dans l'assemblage avec le code suivant:

                ori 0,0,0           # no-op
                blr                 # return to caller

Cela permet au débogueur de remplacer la commande no-op par une instruction d'interruption et de la laisser là en la passant par-dessus.

La fonction pthdb_session_continue_tid permet au débogueur d'obtenir la liste des unités d'exécution qui doivent être maintenues avant de passer d'une seule étape à une seule unité d'exécution ou de poursuivre un groupe d'unités d'exécution. Cette fonction signale un tid à la fois. Si la liste est vide ou que la fin de la liste a été atteinte, PTHDB_INVALID_TID est signalé. Le débogueur doit continuer les pthreads avec les unités d'exécution de noyau qu'il souhaite. Le débogueur est responsable de l'arrêt de l'unité d'exécution et de la poursuite de l'arrêt de l'unité d'exécution. Le paramètre cmd peut être PTHDB_LIST_NEXT ou PTHDB_LIST_FIRST; si PTHDB_LIST_FIRST est transmis, le compteur interne est réinitialisé et le premier tid de la liste est signalé.

Remarque: Cette fonction est prise en charge uniquement lorsque l'indicateur PTHDB_FLAG_HOLD est défini.

La fonction pthdb_session_stop_tid informe la bibliothèque de débogage pthread, qui informe la bibliothèque pthread de l'ID de l'unité d'exécution qui a arrêté le débogueur.

Remarque: Cette fonction est prise en charge uniquement lorsque l'indicateur PTHDB_FLAG_HOLD est défini.

pthdb_session_commit_tid signale les identificateurs d'unité d'exécution du noyau suivants, qui doivent continuer à valider les modifications de mise en attente et d'annulation de mise en attente. Cette fonction signale un tid à la fois. Si la liste est vide ou que la fin de la liste a été atteinte, PTHDB_INVALID_TID est signalé. Le paramètre cmd peut être PTHDB_LIST_NEXT ou PTHDB_LIST_FIRST. Si PTHDB_LIST_FIRST est transmis, le compteur interne est réinitialisé et le premier tid de la liste est signalé.

Remarque: Cette fonction est prise en charge uniquement lorsque l'indicateur PTHDB_FLAG_HOLD est défini.

pthdb_session_update indique à la bibliothèque de débogage pthread de mettre à jour ses informations internes concernant l'état de la bibliothèque pthread. Il doit être appelé chaque fois que le processus s'arrête avant toute autre fonction de bibliothèque de débogage pthread pour s'assurer que leurs résultats sont fiables.

Chaque liste est réinitialisée en haut de la liste lorsque la fonction pthdb_session_update est appelée ou lorsque la fonction de liste signale une valeur PTHDB_INVALID_* . Par exemple, lorsque pthdb_attr signale un attribut de PTHDB_INVALID_ATTR , la liste est réinitialisée au début de sorte que l'appel suivant signale le premier attribut de la liste, le cas échéant.

Un rapport de PTHDB_INVALID_OBJECT représente la liste vide ou la fin d'une liste, où OBJECT correspond à l'une des valeurs suivantes: PTHREAD, ATTR, MUTEX, MUTEXATTR, COND, CONDATTR, RWLOCK, RWLOCKATTR, KEYou TID , selon le cas.

Paramètres

Tableau 1. Paramètres
Article Descriptif
session Descripteur de session.
user Descripteur d'utilisateur du débogueur.
sessionp Pointeur vers le descripteur de session.
name Mémoire tampon de nom de symbole.
cmd Réinitialiser au début de la liste.
concurrencyp Mémoire tampon d'accès concurrent à la bibliothèque.
flags Indicateurs de session.
flagsp Pointeur vers les indicateurs de session.
exec_mode Mode d'exécution de débogage: PEM_32BIT pour les processus 32 bits ou PEM_64BIT pour les processus 64 bits.
callbacks Structure des rappels.
tid ID d'unité d'exécution du noyau.
tidp Mémoire tampon d'ID d'unité d'exécution du noyau.

Valeurs renvoyées

En cas de réussite, ces fonctions renvoient PTHDB_SUCCESS. Sinon, ils renvoient une valeur d'erreur.

Codes d'erreur

Tableau 2. Codes d'erreur
Article Descriptif
PTHDB_BAD_SESSION Descripteur de session non valide.
PTHDB_BAD_VERSION Bibliothèque de débogage pthread ou version de bibliothèque pthread non valide.
PTHDB_BAD_MODE Mode d'exécution non valide.
PTHDB_BAD_FLAGS Indicateurs de session non valides.
PTHDB_BAD_CALLBACK Fonctions de rappel insuffisantes.
PTHDB_BAD_CMD Commande non valide.
PTHDB_BAD_POINTER Pointeur de mémoire tampon non valide.
PTHDB_BAD_USER Descripteur d'utilisateur non valide.
PTHDB_CALLBACK Les débogueurs appellent une erreur.
PTHDB_MEMORY Mémoire insuffisante.
PTHDB_NOSYS Fonction non implémentée.
PTHDB_NOT_PTHREADED Bibliothèque pthread non initialisée.
PTHDB_SYMBOL Symbole de bibliothèque pthread introuvable.
PTHDB_INTERNAL Erreur dans la bibliothèque.