Visualizza e accedi ai thread in GDB

Visualizza e accedi ai thread in GDB
Un altro nome per un debugger sarebbe un'utilità di debug. Individuando i problemi di codice in diverse fasi di un sistema operativo o di una creazione di applicazioni, è considerato un programma per computer che può migliorare il processo di costruzione di un software. Una prova di prova può essere esaminata da alcuni debugger per determinare quali sezioni di codice sono state saltate. Il debugger GNU è uno dei tanti strumenti di debug disponibili per i programmatori C ed è il più grande strumento di debug. Offre alcuni strumenti che consentono all'utente di visualizzare e valutare un programma mentre viene eseguito. Un'altra eccellente funzionalità di debug è supportare molti linguaggi di programmazione tra cui C, C ++, ADA, Fortron e Pascal. Le seguenti funzionalità sono disponibili tramite GDB durante il debug delle applicazioni multi-thread:
  • Può inviare automaticamente le notifiche per i thread appena creati.
  • Fornisce la possibilità di utilizzare il comando thread-no per passare da più thread.
  • Il comando "Info threads" può essere utilizzato per scoprire se ci sono thread attivi.
  • Usando il comando "Thread Applica [Threadno] [All] Args", possiamo inviare lo stesso comando a più thread (o una inclinazione di thread).
  • Per capire cosa succede quando il codice del programma si blocca durante l'esecuzione, sonda all'interno delle tue applicazioni C.
  • Solo i file binari o eseguibili creati durante il processo di compilazione sono compatibili con il debugger GDB.

Basta digitare GDB nella finestra del terminale per accedere al GDB del sistema operativo su Ubuntu o qualsiasi altro sistema operativo basato su Linux o UNIX. Lo screenshot del comando GDB è mostrato nella seguente illustrazione. Mostra i dettagli del copyright del GDB. Il prompt aperto di GDB indica le informazioni relative a quando è pronto ad accettare i comandi. Su alcune configurazioni GDB in cui il sistema operativo abilita i thread, queste funzionalità non sono ancora accessibili. Queste istruzioni non hanno alcun impatto su GDB che non consentono il threading. Ad esempio, un sistema che manca di un supporto thread ignora il risultato della query "Informazioni threads" e ignora costantemente l'istruzione del thread.

Devi solo digitare il comando "smettila" nel terminale GDB per uscire e terminare la sessione corrente di GDB. Puoi vedere le istruzioni di smettere sul debugger GDB come mostrato da segue:

Il debugger GDB ha inventato molti comandi di debugger. Ecco alcuni comandi di esempio elencati che possiamo provare a utilizzare il debugger GDB:

  1. Esegui o r -> Completa l'esecuzione del programma dall'inizio alla fine.
  2. Break o B -> Viene utilizzato per posizionare un punto di interruzione su una determinata linea o frase.
  3. disabilita -> disabilita un punto di interruzione contrassegnato in precedenza.
  4. Abilita -> Abilita un punto di interruzione disabilitato.
  5. Viene eseguita la prossima riga di codice successiva, ma evita di entrare direttamente in funzioni.
  6. PASSAGGIO -> Dovresti passare all'istruzione successiva e iniziare a completare la funzione.
  7. Elenco o L -> Visualizza il codice completo del file C.
  8. Stampa o p -> Viene utilizzato per stampare il valore salvato in precedenza.
  9. SCOPI O Q -> Esce fuori dalla schermata del debugger GDB.
  10. Clear -> Viene utilizzato per rimuovere tutti i punti di interruzione contrassegnati.
  11. Continua -> Viene utilizzato per continuare alla normale esecuzione del programma.

Esempio:
Ecco un piccolo pezzo di codice che utilizza diversi thread, li crea con il metodo pThread_create e passa i metodi dei thread. Il programma di esempio ha una funzione principale () che crea due thread nella seguente illustrazione. Ora ci sono tre thread in esecuzione tra cui il thread genitore/originale (). La funzione principale () utilizza la funzione pThread_create () per creare i thread e chiamarli uno dopo l'altro.

Il ciclo while viene controllato nel seguente codice per vedere se il valore della variabile Count1 è inferiore a 500. Se lo è, l'istruzione di stampa viene eseguita per visualizzare una stringa "thread 1 in esecuzione" insieme alla variabile di conteggio. Il thread viene unito immediatamente dopo aver utilizzato il comando pThread_ join () in questo codice.

Utilizzare i seguenti comandi elencati per compilare il codice utilizzando il compilatore GCC e visualizzare l'attività del thread con il debugger GDP. La seguente immagine è uno screenshot che mostra che il codice precedente viene compilato correttamente:

GCC -G multithreads.c -o multithreads -lpthread

Mentre usi Ubuntu 20.04 Sistema, digitare il seguente comando sullo schermo del terminale per vedere ed esaminare il thread.

$ GDB ./Multithreads

Ora siamo in modalità di debug GDB, grazie alla finestra del terminale. Per stabilire i punti di interruzione sul principale, utilizzare il thread due e thread tre routine di ciascun thread appena formato. Per inserire un punto di interruzione, utilizziamo il seguente codice elencato. È un semplice comando; Basta digitare la pausa. Successivamente, scrivi il nome dei metodi thread per inserire i punti di interruzione. Questo metodo visualizza il numero di riga in cui sono stati aggiunti i punti di interruzione.

Per eseguire il programma, utilizzare la parola chiave "Esegui" o semplice "R" come comando sullo schermo del terminale. Una panoramica dei thread del programma e alcune informazioni sulla loro condizione attuale sono fornite dai thread di informazioni di comando, poiché si dovrebbe prendere in considerazione. Finora c'è stato solo un thread in questo caso.

L'esecuzione dovrebbe continuare a utilizzare il seguente comando:

Altri due thread iniziano in questo posto. Il thread che è attualmente a fuoco è indicato da una stella. Inoltre, viene raggiunto il set di breakpoint per i thread appena formati nei loro metodi di inizializzazione: il thread due () e il thread tre (), in particolare. Usa il comando per spostare la messa a fuoco su un altro thread prima di avviare un thread effettivo debug. Alla riga 17 della sua funzione thread due, thread 2 () si ferma.

Secondo l'output dei "thread di informazioni", il thread due stampa brevemente il contatore e quindi parte il thread 2 alla riga 17. Allo stesso modo, possiamo gestire il thread "thread_three" usando un modo abbastanza simile che abbiamo utilizzato per thread_two.

Conclusione

Per riassumere, siamo finalmente in grado di utilizzare il debugger GDB nel nostro Ubuntu 20.04 Sistema Linux. Per questo, abbiamo spiegato il suo utilizzo nel paragrafo introduttivo e elencato alcune delle caratteristiche principali che ci vengono fornite e lo rendono un debugger unico.