Strona 1 z 1

Bash Debuger/Tester programów

: 02 kwietnia 2014, 19:50
autor: wytrzeszcz
Witam,
mam następujący pomysł:
patrząc na działanie STOS-u (Platforma testowa na PG) w godzinach szczytu pomyślałem czy by w bashu nie napisać swojego.
i pojawiły się problemy .
Plik in składa się w ogólności z danych różnej długości (ilość linii) wiec wpadłem na pomysł by program testowany przy pomocy strumienia błędów odpowiadał scriptowi ile ma podać.
plik out podobnie może zawierać jedną albo więcej lini na test.
I teraz o co chodzi. chcę napisać tak script w bashu by wkładał w mój program pliki in (stdin) i jeśli wyjście programu będzie się różnić od spodziewanego to wyda polecenie debug (poda na standardowe wejście programu np)
no niby proste 2 pętelki jakiś cat head tail ale... nie zadziała to jak chce bo nie mogę przerwać wykonania mojego programiku.


Mam nadzieje że wypowiedziałem się zrozumiale.


ps. da sie z basha pluć na stderr ?

: 04 kwietnia 2014, 18:37
autor: lessmian2
Co do pierwszego, to nie, nie wypowiedziałeś się zrozumiale. Ni w ząb nie wiem co chcesz zrobić, poza tym, że chcesz napisać jakiś skrypt.

Co do drugiego, to:

Kod: Zaznacz cały

echo test >&2

: 04 kwietnia 2014, 19:50
autor: Czocher
Ja mniej więcej zrozumiałem o co biega, chodzi zapewne o testowanie algorytmów w postaci takiej, że mamy pewien zbiór testów (plików test.in i test.out). Przepuszczamy plik test.in przez nasz program (dajemy go na stdin), nasz program na stdout wypluwa jakieś wyniki w zależności od testów. Otrzymane wyniki testujemy z przewidywanymi z pliku test.out. Jeżeli jakiś się nie zgadza do wypisujemy błąd ala "Program nie wykonał poprawnie testów "test".

Przykład: Program dodający dwie liczby
test.in: test.out: Nie rozumiem tylko o co dokładnie chodzi z tym przekazywaniem czegoś do(?) programu przez stderr? Chcesz swojemu programowi sygnalizować błędy? Btw. skrypty testujące (napisane w bashu) do tego typu zadań są do pobrania z github, jest ich conajmniej parę.

: 05 kwietnia 2014, 00:41
autor: wytrzeszcz
lessman dziękuje
Czocher no wiem ale problem jest taki że błąd wykryje w tescie 11 a on ma np 100 lini z okładem jak wykryć pierwszą złą linie i na nią zareagować w locie programu ?

: 09 kwietnia 2014, 19:59
autor: Czocher
Do takich rzeczy jakie opisujesz @wytrzeszcz stosuje się nie pliki *.in i *.out a specjalnie do tego celu napisane programy testujące. Napisz sobie program który forknie się tuż po uruchomieniu, przekieruje odpowiednio swoje stdin i stdout, albo stwórz własne łącza (man dup, man dup2, man fork) i wówczas możesz badać co zostaje wprowadzone do procesu-dziecka i w razie niepowodzenia któregoś z testów zareagować na to odpowiednio.

: 29 kwietnia 2014, 23:53
autor: wytrzeszcz
Czocher tak patrze czytam itd i wychodzi że nie działa jak, chce bo sprowadza się to do napisania programu w C a nie scriptu w bashu ( tak dla siebie to żaden problem, ale wymagali script), czy się mylę ?

: 30 kwietnia 2014, 17:51
autor: Czocher
Fork i pipeline można robić również w czystym bashu. Wymianę danych można robić przez łącza nazwane (fifo np.).
http://stackoverflow.com/questions/3096 ... ec-in-bash
http://www.linuxjournal.com/content/usi ... fifos-bash
http://pl.wikipedia.org/wiki/Potok_%28Unix%29

: 10 maja 2014, 12:02
autor: wytrzeszcz
Wyjdę na debila pewno ale mam takie coś:

Kod: Zaznacz cały

[...]
out="$katalog/out" # wyjcie
fifo="$katalog/fifo" # wejscie
mkfifo $fifo # nawet powstalo (potok nazwany)
touch $out
[...] #konfig innych rzeczy
./a.out <$fifo >$out & pid=$!
[...] # wyciąganie inputa linia po nili
echo "$liniain" >> $fifo	
[...] #operacje porównania outów itd


i to nie chce działać co robię źle?
PS cały script tu:
http://kuba.witominska.net/jakub/so/projekt.sh