[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