Dette er noe relatert til gdb-sett overskrivingslogging på skal overskrive gdb.txt riktig? .
La oss si at jeg kjører en økt med et eller annet program. La meg for eksempel ta eksemplet med qbittorrent igjen.
Som delt før dette er hvordan en kjøring skjer –
$ gdb qbittorrent (gdb) set logging overwrite on (gdb) set logging on (gdb) set pagination 0 (gdb) run
en måte jeg vet er å avslutte applikasjonen elegant, men noen ganger henger applikasjonen / tar for lang tid eller bare ikke svarer.
Så er det eneste alternativet som er igjen med meg å bruke CTRL+C
som hvis jeg forstår det riktig dreper den underliggende applikasjonen , i vårt eksempel qbittorrent og da er i stand til å avslutte gdb ved hjelp av
(gdb) quit
Er / ville det være noen annen måte å avslutte applikasjonen og likevel la gdb-økt fortsetter å kjøre, eller den eneste måten er den rå måten jeg nevnte ovenfor.
AFAI vet at det å drepe en søknadsprosess burde være den siste løsningen og ikke den første. >
Svar
Du kan bruke signaler til dette. Før du starter programmet, setter du opp USR1
eller USR2
for å bryte gdb
uten å påvirke program:
handle SIGUSR1 nopass
Deretter kan du kjøre programmet ditt, og når du trenger å stoppe det, kjør kill -USR1
fra et annet skall med passende (barn) pid. gdb
vil sette applikasjonen på pause, og du kan deretter legge til bruddpunkter, undersøke tilstand osv., og hvis du vil, fortsett kjøringen med cont
.
gdb
under standardinnstillinger, dreper Ctrl-C ikke applikasjonen, bare bryter inn i feilsøkingsprogrammet, hvor du kan bestemme hva du skal gjøre. Brukcont
til " svelg " signalet, og applikasjonen fortsetter uforstyrret. Eller bruksignal 2
for å sende SIGINT (2) til applikasjonen. Eller brukkill
for å drepe applikasjonen.