Я запускаю скрипт 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. Я получаю повторения, хотя в разных парах приложения и входов.

Как я могу узнать, что происходит и решить это? Или я что-то не так делаю?

Фернандо Сезар
источник