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

  • Ao executar em gdb nas configurações padrão, Ctrl-C não mata o aplicativo, apenas invade o depurador, onde você pode decidir o que fazer. Use cont para " engula " o sinal e o aplicativo continua sem ser perturbado. Ou use signal 2 para passar o SIGINT (2) para o aplicativo. Ou use kill para encerrar o aplicativo.

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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *