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 callerCela 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 callerCela 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é.
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.
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é.
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
| 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
| 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. |