Detta är något relaterat till gdb-inställning för överskrivning inloggning om borde skriva över gdb.txt korrekt? .
Låt oss säga att jag kör en session med någon applikation. Låt mig till exempel ta exemplet med qbittorrent igen.
Som delad tidigare så är det hur en körning händer –
$ gdb qbittorrent (gdb) set logging overwrite on (gdb) set logging on (gdb) set pagination 0 (gdb) run
ett sätt jag vet är att avsluta applikationen elegant men ibland hänger applikationen / tar för mycket tid eller svarar helt enkelt inte.
Då är det enda alternativet som finns kvar med mig att använda CTRL+C
som om jag förstår rätt dödar den underliggande applikationen , i vårt exempel qbittorrent och sedan kan sluta gdb med hjälp av
(gdb) quit
Finns / skulle det finnas något annat sätt att avsluta applikationen och ändå låta gdb-session fortsätter att köra eller det enda sättet är det råa sättet jag nämnde ovan.
AFAI vet att döda en ansökningsprocess ska vara den sista lösningen och inte den första.
Kommentarer
Svar
Du kan använda signaler för detta. Innan du startar ditt program, ställ in USR1
eller USR2
för att bryta gdb
utan att påverka program:
handle SIGUSR1 nopass
Sedan kan du köra ditt program, och när du behöver stoppa det, kör kill -USR1
från ett annat skal med lämplig (barn) pid. gdb
pausar applikationen och du kan sedan lägga till brytpunkter, undersöka tillstånd etc., och om du vill fortsätta körningen med cont
.
gdb
under standardinställningar dödar inte Ctrl-C applikationen, utan bryter bara in i felsökaren, där du kan bestämma vad ska man göra. Användcont
till " sväljer " signalen och applikationen fortsätter ostörd. Eller användsignal 2
för att skicka SIGINT (2) till applikationen. Eller användkill
för att döda applikationen.