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

  • Als je draait onder gdb onder standaard instellingen, stopt Ctrl-C de applicatie niet, maar breekt gewoon in de debugger, waar je kunt beslissen wat te doen. Gebruik cont voor " slik " het signaal, en de applicatie gaat ongestoord verder. Of gebruik signal 2 om de SIGINT (2) door te geven aan de applicatie. Of gebruik kill om de applicatie te beëindigen.

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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *