Debug di un errore di segmentazione quando faccio ctrl c
-
23-08-2019 - |
Domanda
ho un errore di segmentazione quando posso cancellare il mio programma. Sto usando gdb per il debug, il problema è che quando si preme Ctrl-C, mentre io sono il debug gdb non cancella il programma e fare ciò che si suppone per farlo è fermarlo.
Quello che voglio è fare i tasti Ctrl-C e non consentono gdb per fermarlo. C'è un modo per fare questo? Eventuali altre raccomandazioni per il debug? Non posso usare printf perché sinceramente non ho un'idea chiara dove il problema proviene.
Soluzione
gdb sta intercettando il segnale. Quando si preme CTRL-C, si sta effettivamente causando il driver di terminale per generare un SIGINT.
Quello che dovete fare è avere GDB generare il SIGINT utilizzando il segnale di comando. la sintassi è
segnale num
e il segnale uomo vi dirà il numero di segnale (in questo caso, è il segnale SIGINT 2, in modo da signal 2
lo farà.)
Aggiornamento
Certo, basta, è possibile utilizzare il nome simbolico. info signal
vi dirà tutti i nomi, ecc.
Oh, a proposito, le probabilità sono che avete un gestore di segnale installato per SIGINT e gli argomenti non ha ragione in qualche modo.
Altri suggerimenti
Un'alternativa è quella di smettere di gdb dalla cattura del SIGINT digitando al prompt handle SIGINT noprint pass
gdb prima di eseguire il programma.
Una possibilità è quella di caricare il file core prodotta quando non è in esecuzione nel debugger gdb in. Dall'interno di gdb, tipo core-file [filename]
.
È anche possibile inviare il CTRL-C (aka SIGINT) da un altro terminale: uccidere -INT