|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2009
Messaggi: 119
|
[c - Linux] debug: ddd con processi e thread
Salve a tutti, vorrei chiedervi qualche consiglio per il debug di programmi c che hanno vari processi e thread.
Finche' facevo programmi con un solo flusso di esecuzione con ddd nn avevo nessun problema, visto che sostanzialmente lo usavo per fermare l'esecuzione nel punto interessato e vedere il valore di variabili e strutture dati, ma ora, che invece sto' facendo un progetto di programmazione di sistema, e quindi ci sono vari processi e thread di mezzo, nn riesco piu' a usarlo. In pratica il problema e' che nn so' come far muovere il flusso di esecuzione per far andare contemporanemente 2 processi: per esempio se faccio uno fork dove il padre fa' un server e il figlio un client, ddd segue il flusso del padre e basta. Quindi si blocca in attesa sulla accept per esempio. Ecco in questo punto vorrei cercare di far partire anche il figlio in modo da poter fare qualcosa. Sapete come si puo' fare? Oppure con ddd proprio nn si puo' fare (anche se mi sembra strano). |
|
|
|
|
|
#2 | |
|
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
Quote:
Penso che questo sia dovuto ad una limitazione del kernel, non al debugger in sè. Per eseguire il debug di applicazioni multithread dovrebbero esserci dei moduli specifici, ma non ti so dire niente in merito. |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Veramente se usi i threads gdb è capacissimo di distinguere tra i vari thread e mettere dei breaks su ognuno, almeno a me funzionava.
Il thread che esegue il break cattura l'interruzione e si ferma, gli altri continuano ad andare avanti. In effetti però in caso di processi multipli gdb non si interessa ai figli
|
|
|
|
|
|
#4 | |
|
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
Quote:
|
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Per verificare se la tua versione lo fa scrivi un "info thread" dalla console di gdb. Se non ti mostra niente non c'è il supporto. Per i processi il supporto è piu' recente (mi sembra dalla versione 7.0 o 7.1), ma qui non è una tragedia perchè anche con una versione più vecchia al più puoi fare l'attach di un processo arbitrario in una seconda sessione di gdb (i.e. fai partire il programma, questo fa il fork, fai partire gdb ed esegui l'attach al pid del figlio). Un po' di lavoro in più ma niente che 5 righe di script non possano risolvere.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Mar 2008
Messaggi: 267
|
Quote:
Terrò a mente questo fatto quando mi capiterà di riutilizzare i pthread. |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Aug 2009
Messaggi: 119
|
Grazie ragazzi per le risposte. Il punto e' che nn ho idea di come si faccia a fare quello che dite. Come faccio a capire quale flusso di esecuzione e' partito quando c'e' una fork o una pthread_create?
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:13.




















