PDA

View Full Version : Debbuggare applicazione multiprocesso.


pierpo
01-02-2005, 08:20
Ciao ragazzi.
Per lavoro, insieme ai miei colleghi, abbiamo realizzato un'applicazione embedded realtime che gira sotto linux kernel 2.4.

L'appilcazione e' un multiprocesso, ovvero e' costituita da qualche decina di eseguibili che si scambiano informazioni e messaggi tramite Basic Services (AMF, Message service, Event service).

Il problema ora e' debbuggare il sistema:
usando il ddd riesco a stoppare un solo eseguibile, metre tutti gli altri continuano a girare e causano errori dovuti a timeout.

Percio' ho neccessita' di fermare TUTTO, non solo il mio processo.
Mi sapete consigliare un debugger che riesca a "fermare" l'intero precessore? (un Pentium 3), e' suffciente fermare lo scheduler del kernel?

71103
01-02-2005, 12:03
in teoria un debugger decente dovrebbe essere in grado di agganciarsi a più processi contemporaneamente... :P

pierpo
01-02-2005, 12:31
mi sapresti fare qualche nome?

ilsensine
01-02-2005, 13:51
Non è così facile; meglio era se avevi a che fare con una unica applicazione multithread. Se hai più processi, puoi fermarli contemporaneamente solo se appartengono allo stesso process group (v. man setpgid) tramite un SIGSTOP mandato con kill (v. man kill per come inviare segnali a un process group). Non so se gdb, all'atto di agganciarsi a un processo, invia un segnale al solo processo o all'intero gruppo cui appartiene; se non lo fa, puoi mandarlo manualmente.

pierpo
01-02-2005, 14:05
Grazie per la dritta, purtroppo non ho scelto io di fare un multiprocesso, sono dirirettive aziendali.

In questi giorno provo a smanettare con la setpgid e kill.

Ps
ma con la kill non uccido i precessi? io vorrei solo frizzarli per poi farli riprendere esattamente dallo stesso punto

kingv
01-02-2005, 14:46
Originariamente inviato da pierpo

Ps
ma con la kill non uccido i precessi? io vorrei solo frizzarli per poi farli riprendere esattamente dallo stesso punto


con la kill mandi un segnale, quello di default è TERM ma ne esistono altri che possono essere intercettati dal processo.


con:
man 7 signal
vedi la lista dei segnali standard di linux

71103
01-02-2005, 16:01
Originariamente inviato da pierpo
mi sapresti fare qualche nome?
Mi spiace, ma linux lo conosco molto poco, giusto l'essenziale per l'università; il debug in linux non l'ho mai fatto; quando programmo in Windows uso Microsoft Visual Studio 6 oppure Open Watcom; nel primo caso sono assolutamente certo che sia possibile debuggare più processi contemporaneamente (il debugger è il punto forte del visual studio ;)), nel secondo caso non sono del tutto sicuro, ma penso che anche lì si possa fare.