Sto sviluppando un'applicazione server C ad alta rete che viene eseguita come un demone. In alcune circostanze, l'app si arresta in modo anomalo (sempre senza core). Come posso eseguire il debug del daemon in esecuzione con gdb per trovare il posto che genera SIGSEGV?Debug di un demone in esecuzione utilizzando gdb
Note esplicative:
so come collegare utilizzando gdb a un processo in esecuzione utilizzando il comando attach
Dopo aver fissato al processo, si ferma. Se corro quindi "continua", gdb rimane bloccato se il programma non si blocca. Se premo CTRL-C, il processo sta uscendo e non riesco a staccare semplicemente gdb.
Quindi la domanda è: esiste un modo per continuare il processo senza il gdb essere bloccato ma essere in grado di staccare, se il processo non va in crash?
Hai provato cambiare il impostazioni di coredump con es il comando 'ulimit'? E/o eseguire una versione di debug? O forse aggiungendo più registrazioni per restringere le possibili posizioni per l'incidente? –
Ho provato tutte le possibilità. Il processo viene eseguito come servizio upstart su un server Ubuntu ed è impostato su un determinato utente all'avvio del servizio. Il limits.conf contiene valori illimitati sia per nofile che per core per quell'utente. Ho impostato fs.suid_dumpable e kernel.core_uses_pid in /etc/sysctl.conf Ho aggiunto più logging ma è un server ad alto traffico e genera troppi output. –