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 pará-lo, execute kill -USR1 de outro shell com o pid (filho) apropriado. gdb irá pausar o aplicativo e você poderá adicionar pontos de interrupção, examinar o estado etc. e, se desejar, continuar a execução com cont .