Ciao a tutti ho un problema riguardo al debug. Sono su unix quindi uso gdb il problema è che quando faccio fork non riesco a vedere cosa fa il processo figlio ma solo il padre. Come si può fare???
Grazie
Ciao a tutti ho un problema riguardo al debug. Sono su unix quindi uso gdb il problema è che quando faccio fork non riesco a vedere cosa fa il processo figlio ma solo il padre. Come si può fare???
Grazie
http://sourceware.org/gdb/current/on...b_5.html#SEC28Originariamente inviato da andry85
Ciao a tutti ho un problema riguardo al debug. Sono su unix quindi uso gdb il problema è che quando faccio fork non riesco a vedere cosa fa il processo figlio ma solo il padre. Come si può fare???
Grazie
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Grazie mille il problema è che facendo set follow-fork-mode child continua a non seguirmi il figlio..... come devo fare??
Se leggevi bene la pagina:Originariamente inviato da andry85
Grazie mille il problema è che facendo set follow-fork-mode child continua a non seguirmi il figlio..... come devo fare??
"Currently, the only platforms with this feature are HP-UX (11.x and later only?) and GNU/Linux (kernel version 2.5.60 and later)."
Sulla slackware su cui ho fatto la prova (kernel 2.4.26) infatti non funziona neanche a me.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Quindi non è possibile seguire il debug del figlio?
Certo ... ma è più "rognoso".Originariamente inviato da andry85
Quindi non è possibile seguire il debug del figlio?
Nel child metti all'inizio un codice del tipo:
printf ("Child pid=%d\n", getpid ());
getchar ();
in modo che stampi il pid del figlio e resti in attesa di un tasto.
Quindi apri una nuova shell e avvii una nuova istanza del gdb specificandogli però, nota bene, di "attaccarsi" ad un processo specifico:
gdb --pid=XXX nomeprogramma
dove XXX è il pid del tuo processo child. A quel punto il gdb è fermo dentro la getchar() (la funzione esatta in cui è dentro è sicuramente una read() ... insomma a più basso livello).
Quindi vai avanti come vuoi.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ho un altro problema con la fork. Praticamente mi serve un contatore che incremento ogni volta che creo un figlio. Nel momento in cui vado a creare un altro figlio devo controllare il contatore che non superi un certo valore. Il problema è che ogni volta che forko un figlio il contatore viene reinizializzato a 0.... Che dovrei fare?
A seguito di una fork, padre e figlio "condividono" le stesse pagine di memoria ma alla prima scrittura in memoria da parte di uno dei due (padre o figlio), la pagina viene duplicata e quindi differenziata tra padre e figlio (tecnica COW, copy-on-write).Originariamente inviato da andry85
Ho un altro problema con la fork. Praticamente mi serve un contatore che incremento ogni volta che creo un figlio. Nel momento in cui vado a creare un altro figlio devo controllare il contatore che non superi un certo valore. Il problema è che ogni volta che forko un figlio il contatore viene reinizializzato a 0.... Che dovrei fare?
A questo punto la domanda: ma questo contatore ti serve nel padre o nel figlio?? Io credo che ti serva nel processo padre, anche perché avrebbe poco senso che un figlio sappia quanti altri figli ci sono!
Nel processo padre non vedo problemi: metti una variabile che poi incrementi dopo la fork ma sempre nel processo padre!
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet