Dit is enigszins gerelateerd aan gdb set overschrijven logging moet gdb.txt correct overschrijven? .
Laten we zeggen dat ik een sessie draai van een applicatie. Laat me als voorbeeld nogmaals het voorbeeld van qbittorrent nemen.
Zoals eerder gedeeld, is dit hoe een run gebeurt –
$ gdb qbittorrent (gdb) set logging overwrite on (gdb) set logging on (gdb) set pagination 0 (gdb) run
een manier die ik weet, is om de applicatie netjes af te sluiten, maar soms loopt de applicatie vast / kost te veel tijd of reageert gewoon niet.
Dan is de enige optie die bij mij overblijft het gebruik van CTRL+C
die, als ik het goed begrijp, de onderliggende applicatie doodt , in ons voorbeeld qbittorrent en dan ben ik in staat om gdb af te sluiten door middel van
(gdb) quit
Is / zou er een andere manier zijn om de applicatie af te sluiten en toch de gdb-sessie blijven draaien of de enige manier is de ruwe manier die ik hierboven noemde.
AFAI weet dat het doden van een aanvraagproces de laatste oplossing zou moeten zijn en niet de eerste.
Opmerkingen
Antwoord
U kunt hiervoor signalen gebruiken. Voordat u uw programma start, stelt u USR1
of USR2
in om gdb
te verbreken zonder de programma:
handle SIGUSR1 nopass
Vervolgens kunt u uw programma starten, en wanneer u het moet stoppen, voert u kill -USR1
uit vanaf nog een schil met de juiste (kind) pid. gdb
pauzeert de applicatie, en je kunt dan breakpoints toevoegen, de status onderzoeken enz., en als je wilt, de uitvoering voortzetten met cont
.
gdb
onder standaard instellingen, stopt Ctrl-C de applicatie niet, maar breekt gewoon in de debugger, waar je kunt beslissen wat te doen. Gebruikcont
voor " slik " het signaal, en de applicatie gaat ongestoord verder. Of gebruiksignal 2
om de SIGINT (2) door te geven aan de applicatie. Of gebruikkill
om de applicatie te beëindigen.