Bash Debuger/Tester programów

Potrzebujesz pomocy z C, C++, perl, python, itp.
wytrzeszcz
Posty: 21
Rejestracja: 12 kwietnia 2009, 20:10
Lokalizacja: Gdynia

Bash Debuger/Tester programów

Post 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 ?
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post 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
Czocher
Beginner
Posty: 140
Rejestracja: 26 maja 2007, 23:19

Post 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ę.
wytrzeszcz
Posty: 21
Rejestracja: 12 kwietnia 2009, 20:10
Lokalizacja: Gdynia

Post 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 ?
Czocher
Beginner
Posty: 140
Rejestracja: 26 maja 2007, 23:19

Post 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.
wytrzeszcz
Posty: 21
Rejestracja: 12 kwietnia 2009, 20:10
Lokalizacja: Gdynia

Post 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ę ?
Czocher
Beginner
Posty: 140
Rejestracja: 26 maja 2007, 23:19

Post 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
wytrzeszcz
Posty: 21
Rejestracja: 12 kwietnia 2009, 20:10
Lokalizacja: Gdynia

Post 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
ODPOWIEDZ