pthdb_pthread_context oder pthdb_pthread_setcontext Subroutine

Zweck

Bietet Zugriff auf den pthread-Kontext über die Struktur struct context64 .

Bibliothek

pthread-Debugbibliothek (libpthdebug.a)

Syntax

#include <sys/pthdebug.h>

int pthdb_pthread_context (pthdb_session_t   session,
                           pthdb_pthread_t   pthread,
                           pthdb_context_t * context)

int pthdb_pthread_setcontext (pthdb_session_t   session,
                              pthdb_pthread_t   pthread,
                              pthdb_context_t * context)

Beschreibung

Die pthread-Debugbibliothek ermöglicht den Zugriff auf den pthread-Kontext über die Struktur struct context64 , unabhängig davon, ob es sich um einen 32 -Bit-oder 64-Bit-Prozess handelt. Der Debugger sollte in der Lage sein, von 32-Bit auf 64-Bit und von 64-Bit für 32-Bit-Prozesse zu konvertieren. Inwieweit diese Struktur gefüllt wird, hängt vom Vorhandensein der Sitzungsflags PTHDB_FLAG_GPRS, PTHDB_FLAG_SPRSund PTHDB_FLAG_FPRS ab. Sie müssen die pthread-Debugbibliothek verwenden, um auf den Kontext eines pthread ohne Kernel-Thread zuzugreifen. Die pthread-Debugbibliothek kann auch verwendet werden, um auf den Kontext eines pthread mit einem Kernel-Thread zuzugreifen, aber dies führt zu einem Rückruf an den Debugger, was bedeutet, dass der Debugger diese Informationen selbst abrufen kann. Der Debugger stellt fest, ob der Kernel-Thread im Benutzer-oder Kernelmodus ausgeführt wird, und füllt dann die -Struktur context64 entsprechend aus. Die pthread-Debugbibliothek verwendet diese Informationen nicht selbst und ist daher nicht sensibel für die korrekte Implementierung der Rückruffunktionen read_regs und write_regs .

pthdb_pthread_context meldet den Kontext des pthread basierend auf den Einstellungen der Sitzungsflags. Verwendet den Rückruf read_regs , wenn der pthread einen Kernel-Thread hat. Wenn read_regs nicht definiert ist, wird PTHDB_NOTSUPzurückgegeben.

pthdb_pthread_setcontext legt den Kontext des pthread basierend auf den Einstellungen der Sitzungsflags fest. Verwendet den Rückruf write_data , wenn der pthread keinen Kernel-Thread hat Verwenden Sie den Rückruf write_regs , wenn der pthread einen Kernel-Thread hat.

Wenn der Debugger die Rückrufe read_regs und write_regs nicht definiert und der pthread keinen Kernel-Thread hat, werden die Funktionen pthdb_pthread_context und pthdb_pthread_setcontext erfolgreich ausgeführt. Wenn ein pthread jedoch keinen Kernel-Thread hat, schlagen diese Funktionen fehl und geben PTHDB_CONTEXTzurück.

Parameter

Element Beschreibung
Sitzung Sitzungskennung.
pthread pthread-Handle.
Kontext Kontextpufferzeiger.

Rückgabewerte

Bei Erfolg geben diese Funktionen PTHDB_SUCCESSzurück. Andernfalls wird ein Fehlercode zurückgegeben.

Fehlercodes

Element Beschreibung
PTHDB_BAD_SITZUNG Ungültige Sitzungskennung.
PTHDB_BAD_PTHREAD Ungültige pthread-Kennung
PTHDB_BAD_POINTER Ungültiger Pufferzeiger.
PTHDB_CALLBACK Callback-Funktion fehlgeschlagen.
PTHDB_KONTEXT Der pthread-Kontext konnte nicht bestimmt werden.
PTHDB_SPEICHER Nicht genügend Speicher
PTHDB_NOTSUP pthdb_pthread_ (set) context gibt PTHDB_NOTSUP zurück, wenn die Rückrufe read_regs, write_data oder write_regs auf NULL gesetzt sind.
PTHDB_INTERNAL Fehler in Bibliothek.