Estou executando um script básico que executa vários aplicativos pequenos com entradas diferentes. Alguns desses aplicativos têm bugs (por exemplo, nunca terminam) e, por isso, uso ulimit para obter a saída ou um erro de todos eles.
Em "pseudo-bash" é algo assim:
for app in $( find apps ); do
for input in $( find inputs ); do
(
ulimit -Sf 150 -St 1 -Sd 1024 -Sv 51200
app < input
)
# handle output
done
done
Isso funciona bem para a maioria dos aplicativos e entradas (mais de 1.000 testes), no entanto, certos aplicativos com determinadas entradas (sempre iguais) têm problemas e congelam o script.
Eu testei isso manualmente e descobri que aqueles que congelam têm problemas (falha de segmentação). Mas isso deveria acontecer. Estou usando o ulimit com precisão para poder obter um erro e seguir em frente.
Exemplos de mensagem de erro:
*** glibc detected *** <app name>: malloc(): memory corruption (fast) 0x00000000022de2f1 ***
.
*** glibc detected *** <app name>: corrupted double-linked list: 0x0000000001cc3120 ***
.
*** glibc detected *** <app name>: free(): invalid size: 0x00000000017daf20 ***
Eu tentei isso em diferentes máquinas, versões gcc, versões linux. Eu recebo repetições, embora em diferentes pares de aplicativos e entradas.
Como posso descobrir o que está acontecendo e resolvê-lo? Ou estou fazendo algo errado?