gdb congela em malloc
Suponha que eu tenha algum programa C como este:
#include <stdlib.h>
#include <stdbool.h>
int main()
{
while (true) {
void *p = malloc(1000);
free(p);
}
return 0;
}
e eu anexo a ele comgdb
como issogdb a.out PID
. gdb
atribui com sucesso a ele, mas que eu tento fazer algo comocall printf("bla bla bla")
gdb
congela e se eu pressionarCtrl^C
Eu entendi isso:
(gdb) call printf("bla bla bla")
^C
Program received signal SIGINT, Interrupt.
__lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95
95 ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: No such file or directory.
The program being debugged was signaled while in a function called from GDB.
GDB remains in the frame where the signal was received.
To change this behavior use "set unwindonsignal on".
Evaluation of the expression containing the function
(malloc) will be abandoned.
When the function is done executing, GDB will silently stop.
Suponho que isso acontece porque meua.out
estava criando um objeto e adquiriu uma trava dentromalloc.c
e neste momento eu me conectei comgdb
e tentou criar a string "bla bla bla" usandomalloc
.
Minha pergunta é como posso detectar que estou dentromalloc.c
e deixar meu programa terminar essa execução? Eu preciso fazer isso não dentro da linha de comando, mas usando algum tipo de script gdb (eu só posso executar comandos dentrogdb
com-ex
opção).