Пиша сноп за тест на единица и бих искал да установя поведението, че ако дъщерният процес се е повредил, искам да го стартирам отново под GDB.
Общият подход е да се изпълнят всички тестове паралелно, това се прави чрез сглобяване на командите заедно и прехвърляне на командите в xargs -P 0 -L 1 -I CMD bash -c CMD
, след което искам да хвана всеки от тези вътрешни процеси, които са се повредили, и да ги стартирам отново последователно под gdb. Обърнете внимание, че това е различно нещо от улавянето на техните върнати стойности, които ще продължа да третирам за целите на преминаване/неуспех на теста.
Очевидно тестът за segfaulting е неуспешен тест... въпросът е да го накарате да генерира автоматично gdb сесия с уловена segfault, за максимална продуктивност :)
Знам, че макросът WTERMSIG
може да се използва в C, за да се провери дали дъщерен процес е смутен, след като излезе. Със сигурност бих могъл да напиша малка C/C++ помощна програма, която да приложи това решение вместо мен, но би било хубаво, ако имаше вграден начин да направя това с bash
.
bash
, ако командата завърши със сигнал, нейната върната стойност ще бъде128+n
, където n е номерът на сигнала (11 за SIGSEGV), така че бих очаквал проверката дали върнатата стойност е 139 ще бъде достатъчна. Имайте предвид, че самият xargs ще върне 125, ако командата бъде убита от сигнал. - person Hasturkun   schedule 14.07.2021