Isso está um pouco relacionado a gdb set overwrite login deve substituir gdb.txt correto? .
Digamos que eu esteja executando uma sessão de algum aplicativo. Para fins de exemplo, deixe-me pegar o exemplo de qbittorrent novamente.
Conforme compartilhado antes, é assim que uma execução acontece –
$ gdb qbittorrent (gdb) set logging overwrite on (gdb) set logging on (gdb) set pagination 0 (gdb) run
uma maneira que eu sei é sair do aplicativo normalmente, mas às vezes o aplicativo trava / leva muito tempo ou simplesmente não responde.
Então, a única opção que me resta é usar CTRL+C
que, se entendi corretamente, mata o aplicativo subjacente , em nosso exemplo qbittorrent e, em seguida, sou capaz de sair do gdb por meio de
(gdb) quit
Existe / haveria qualquer outra maneira de sair do aplicativo e ainda permitir que o A sessão gdb continua em execução ou a única maneira é a forma crua que mencionei acima.
AFAI sei que matar um processo de aplicativo deve ser a última solução e não a primeira.
Comentários
Resposta
Você pode usar sinais para isso. Antes de iniciar seu programa, configure USR1
ou USR2
para quebrar gdb
sem afetar o programa:
handle SIGUSR1 nopass
Em seguida, você pode executar seu programa e, quando precisar interrompê-lo, execute kill -USR1
de outro shell com o pid (filho) apropriado. gdb
pausará o aplicativo e você poderá adicionar pontos de interrupção, examinar o estado etc. e, se desejar, continuar a execução com cont
.
gdb
nas configurações padrão, Ctrl-C não mata o aplicativo, apenas invade o depurador, onde você pode decidir o que fazer. Usecont
para " engula " o sinal e o aplicativo continua sem ser perturbado. Ou usesignal 2
para passar o SIGINT (2) para o aplicativo. Ou usekill
para encerrar o aplicativo.