[RoLUG] URGENTE Aiuto per debugger C
Ciro Mattia Gonano
gonano@CS.UniBO.IT
Gio 2 Ott 2003 10:18:54 CEST
Cum Purpurea Rosa pulchritudinem admiratus eram, Domini Die 01.10.2003 mip
<mipland@hotmail.com> mihi appropinquavit proclamavitque:
> Ciao a tutti:vi espongo subito il problema.
> Se io scrivo un programma in C usando la system call fork(), creo un
> processo figlio del padre che ha lanciato la fork() (ovviamente).
> Il fatto è questo: se io tramite gdb voglio vedere i valori delle
> variabili nel processo figlio, come faccio? Visto che i nomi sono gli
> stessi di quelle del processo padre, non ho idea di come fare...
>
lasciami il tempo di leggere la posta! :)
cavolo, ti mancava giusto la puntata del mese prossimo... spiego appunto come
seguire i programmi multiprocesso e multithread! ;)
Purtroppo sei sfortunato: non esistono facilities per la fork(), almeno, non
come ne esistono (e sono tante) per i pthread. Semplicemente gdb continua a
seguire il padre, e se il figlio incontra nel suo codice un breakpoint, gli
viene alzato un SIGTRAP, che se non viene bloccato lo fa morire.
Puoi utilizzare un escamotage, cmq: appena dopo l fork(), fai eseguire al figlio
una sleep() di una ventina di secondi, in maniera da avere tutto il tempo per:
1) recuperarti il PID del figlio (con ps aux)
2) aprire un altro gdb ed effettuare l'attach del processo "already-running",
ovvero del figlio stesso.
Solo su sistemi HP-UX, per il momento, e` anche disponibile il setting
"follow-fork-mode", che ti permette di scegliere se seguire il padre, il figlio
o decidere di volta in volta; purtroppo per ora su Linux ce lo scordiamo :(
Adieu,
--
Lestat de Lioncourt -- a.k.a -- Ciro Mattia Gonano
Undergraduate student in Computer Science at University of Bologna
IHGGer #1049 <=> ICQ#: 52631406 <=> URL: http://www.CS.UniBO.It/~gonano
Debian admin at Students.CS.UniBO.It <=> look at headers for my JabberID & GPG
Maggiori informazioni sulla lista
RoLUG