Torna indietro   Hardware Upgrade Forum > Software > Programmazione

OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Abbiamo potuto mettere le mani in anteprima sul nuovo monitor MSI dedicato ai giocatori: un mostro che adotta un pannello QD-OLED da 26,5 pollici con risoluzione 2560 x 1440 pixel, frequenza di aggiornamento fino a 500 Hz e tempo di risposta di 0,03 ms GtG
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI aggiorna la sua linea di droni ultraleggeri con Neo 2, un quadricottero da 160 grammi che mantiene la compattezza del predecessore ma introduce una stabilizzazione meccanica a due assi, sensori omnidirezionali e un sistema LiDAR
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-01-2011, 11:16   #1
agosteeno
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).
agosteeno è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 12:33   #2
Supdario
Member
 
Iscritto dal: Mar 2008
Messaggi: 267
Quote:
Originariamente inviato da agosteeno Guarda i messaggi
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).
Purtroppo GDB (e di conseguenza DDD, che è basato su esso) e gli altri debugger ordinari non sono in grado di debuggare i programmi multithread o multiprocesso, se provi a debuggare (ad esempio impostando un punto di interruzione) noterai spiacevolmente che ti si impallerà tutto.
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.
Supdario è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 14:14   #3
Tommo
Senior Member
 
L'Avatar di Tommo
 
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
__________________
*ToMmO*

devlog | twitter
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 17:02   #4
Supdario
Member
 
Iscritto dal: Mar 2008
Messaggi: 267
Quote:
Originariamente inviato da Tommo Guarda i messaggi
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
Sei sicuro? Quando lo provo io mi si impalla tutto e sono costretto a dare "killall -9 gdb" per sistemarlo. (usando la libreria pthread.h).
Supdario è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 20:19   #5
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da Supdario Guarda i messaggi
Sei sicuro? Quando lo provo io mi si impalla tutto e sono costretto a dare "killall -9 gdb" per sistemarlo. (usando la libreria pthread.h).
sono un po' di anni ormai che gdb supporta i thread.
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
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 09-01-2011, 12:34   #6
Supdario
Member
 
Iscritto dal: Mar 2008
Messaggi: 267
Quote:
Originariamente inviato da marco.r Guarda i messaggi
sono un po' di anni ormai che gdb supporta i thread.
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.
Hai assolutamente ragione. Ho appena riprovato e funziona tutto. Forse si impallava per il modo in cui avevo scritto il programma (forse quando il thread veniva stoppato dal breakpoint il main continuava facendo finire il programma).

Terrò a mente questo fatto quando mi capiterà di riutilizzare i pthread.
Supdario è offline   Rispondi citando il messaggio o parte di esso
Old 12-01-2011, 11:51   #7
agosteeno
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?
agosteeno è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone L'IA "seria" di Appian è divers...
Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Motorola prepara il suo primo smartphone...
Hisense in forte ribasso: il 75 pollici ...
Galaxy S27 Ultra potrebbe utilizzare la ...
Ultimi 2 giorni: ecco le offerte Amazon ...
Maxi sconti su wallbox e cavi per la ric...
Tutti gli sconti più forti sugli ...
Il prossimo smartphone di OnePlus avr&ag...
Che fine ha fatto il Trump Phone? L'usci...
TOP 10 Amazon Black Friday, aggiornata: ...
Ancora per oggi e domani: -20% Black Fri...
Il Bonus Elettrodomestici è un st...
Giorgia Meloni 'una di noi': Palazzo Chi...
Airbus richiama oltre 6.000 A320: rischi...
Tra open hybrid cloud e sovranità...
Il nuovo SSD Samsung è fatto con ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:49.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v