Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
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


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Poltronesofà colpita da ransomwar...
FSD e Autopilot: Tesla aggiorna i dati c...
Conclusa la campagna di osservazione del...
Il punto della situazione sulle offerte ...
Windows compie 40 anni, tra conquiste e ...
Black Friday Smartwatch: Amazfit, Apple,...
Operativo il primo Tesla Supercharger te...
Grok idolatra Elon Musk e lo considera s...
Il telescopio spaziale James Webb ha oss...
Record per l'energia eolica: nel Regno U...
Dell e HP rimuovono la codifica e transc...
Prezzo eccezionale per Samsung Galaxy S2...
Black Friday esplosivo: arrivano extra s...
Google apre la strada al file sharing tr...
Black Friday Monitor 2025: OLED, QD-OLED...
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: 13:13.


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