Ho un programma multiprocesso eseguito su CPU MIPS con uclibc ed è compilato con gcc 4.5.3. Uno dei processi (è il nome "tv") richiede il collegamento con una libreria condivisa (libtest.so) anch'essa scritta da me. Il processo "tv" è scritto in C++ e libtest.so è in C.Come eseguire il debug del caricamento della libreria condivisa
Ho anche scaricato l'intestazione elf da libtest.so, ha sia il flag PIC che il flag CPIC, quindi penso che la creazione della libreria è OK.
Quando si tenta di eseguire il programma, tutti i processi iniziano correttamente, tranne il processo "tv". Non c'è nessun messaggio di errore. Quando uso ps per controllare il suo stato, è diventato un processo zombie.
Ho provato quanto segue
Se rimuovo il libtest.so dal processo di collegamento e rimuovere qualsiasi riferimento al libtest.so, il processo di "tv" può essere eseguito senza alcun problema.
Se rimuovo alcun riferimento a libtest.so BUT mantieni il file libtest.so nel processo di collegamento, il processo "tv" continua a non funzionare.
Ho provato a utilizzare LD_DEBUG = all per eseguire il debug, ma non funziona nella mia scheda in quanto non esiste un output valido.
Quindi sono che ci sia qualcosa è andato storto quando ld prova a caricare il libtest.so quando processo di "tv" sta iniziando. Ma non so come eseguire il debug? Come dovrei scoprire se la parte di libtest.so che sta causando il problema?
Qualsiasi suggerimento è benvenuto. Grazie in anticipo.
hai provato 'strace'? – mattn
Hmm, domanda molto interessante. Sembra che tu abbia un enorme vantaggio nel controllare la libtest, quindi puoi provare a riprodurre il problema con un semplice processo (non con la tv), quindi rimuovere lentamente tutto da libtest fino a quando il problema non scompare, quindi riaggiungi finché non puoi individuare il problema (stile di ricerca binario). A meno che il problema non sia riproducibile * solo * con la tv e un libtest.so non modificato, nel qual caso, buona fortuna? – Cameron
@mattn Ho usato strace e ho scoperto che ricevo un SIGBUS. Ora vado a cercare di trovare ciò che è causa questo. Grazie mille per il suggerimento. – SSC