Я запускаю скрипт bash, который запускает несколько небольших приложений с разными входами. Некоторые из этих приложений имеют ошибки (например, никогда не заканчивают), и поэтому я использую ulimit, чтобы получить вывод или ошибку от всех из них.
В «псевдо-баш» это как то так:
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
Это хорошо работает для большинства приложений и входных данных (более 1000 тестов), однако некоторые приложения с определенными входными данными (всегда одинаковыми) имеют проблемы и замораживают сценарий.
Я проверил это вручную и обнаружил, что у тех, кто зависает, возникают проблемы (ошибка сегментации). Но это должно произойти. Я использую ulimit точно, чтобы я мог получить ошибку и двигаться дальше.
Примеры сообщения об ошибке:
*** 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 ***
Я пробовал это на разных машинах, версиях gcc, версиях linux. Я получаю повторения, хотя в разных парах приложения и входов.
Как я могу узнать, что происходит и решить это? Или я что-то не так делаю?