Jak mogę debugować skrypt .BAT?

96

Czy istnieje sposób na przejście przez skrypt .bat? Chodzi o to, że mam skrypt budujący, który wywołuje wiele innych skryptów i chciałbym zobaczyć, w jakiej kolejności są wywoływane, abym mógł wiedzieć, gdzie dokładnie muszę się poruszać i dodać swoje modyfikacje .

Vhaerun
źródło
4dos ma wbudowany debugger.

Odpowiedzi:

69

W każdym razie nie wiem, jak przejść przez wykonanie pliku .bat, ale możesz użyć echoi pausepomóc w debugowaniu.

ECHO
Powoduje wyświetlenie komunikatu w pliku wsadowym. Takie jak ECHO Hello World wydrukuje Hello World na ekranie po wykonaniu. Jednak bez wyłączenia @ECHO na początku pliku wsadowego otrzymasz również „ECHO Hello World” i „Hello World”. Na koniec, jeśli chcesz po prostu utworzyć pusty wiersz, wpisz ECHO. dodanie kropki na końcu tworzy pusty wiersz.

PAUZA
Poproś użytkownika o naciśnięcie dowolnego klawisza, aby kontynuować.

Źródło: Pomoc dotycząca plików wsadowych

@ workmad3: answer zawiera więcej dobrych wskazówek dotyczących pracy z echopoleceniem.

Kolejne pomocne źródło ... DDB: Wskazówki dotyczące plików wsadowych DOS

Eric Schoonover
źródło
1
Myślę, że to są moje jedyne opcje.
Vhaerun
18

Upewnij się, że w skryptach nie ma instrukcji „echo off” i wywołaj „echo on” po wywołaniu każdego skryptu, aby zresetować wszystkie pominięte.

Powodem jest to, że jeśli echo jest włączone, interpreter poleceń wypisze każde polecenie (po przetworzeniu parametrów) przed jego wykonaniem. Sprawia, że ​​wygląda to naprawdę źle podczas używania w środowisku produkcyjnym, ale jest bardzo przydatne do celów debugowania, ponieważ możesz zobaczyć, gdzie wynik poszedł nie tak.

Upewnij się również, że sprawdzasz poziomy błędów ustawione przez wywoływane skrypty i programy wsadowe. Pamiętaj, że są do tego 2 różne metody używane w plikach .bat. Jeśli wywołałeś program, poziom błędu wynosi% ERRORLEVEL%, podczas gdy z plików wsadowych poziom błędu jest zwracany w zmiennej ErrorLevel i nie wymaga wokół niego%.

workmad3
źródło
13

W obliczu podobnych obaw znalazłem następujące narzędzie z trywialną wyszukiwarką Google:

JPSoft " Take Command " zawiera plik wsadowy IDE / debugger. Ich krótki film prezentacyjny dobrze to pokazuje.

Korzystam z wersji próbnej od kilku godzin. Oto moja pierwsza skromna opinia:

  • Z jednej strony rzeczywiście umożliwia debugowanie skryptów .bat i .cmd i jestem teraz przekonany, że może pomóc w niektórych przypadkach
  • Z drugiej strony, czasami blokuje i musiałem go zabić ... szczególnie podczas debugowania indeksów (nie zawsze systematycznie) .. nie pokazuje "stosu wywołań" ani przycisku "wyjdź".

To zasługuje na próbę.

Myobis
źródło
1
To prawdopodobnie powinien być komentarz
KyleMit
8
@KyleMit czy możesz wyjaśnić dlaczego? ponieważ jest to samodzielne rozwiązanie różniące się od innych i to odpowiada na pierwotne pytanie? nie dlatego, że jest na tyle krótki, aby zmieścić się w komentarzu, że musi ...
Myobis
1
Właściwie miałem na myśli prawdopodobnie , że może to pójść w obie strony. Ale to całkiem niezła odpowiedź. Z odpowiedzi Centrum Pomocy sekcji: Always quote the most relevant part of an important link. Bez linku ta odpowiedź zniknie, co znowu prawdopodobnie jest w porządku, ale zazwyczaj tego typu sugestie ad-hoc dotyczące niesprawdzonego, zastrzeżonego oprogramowania ogólnie najlepiej pasowałyby do komentarza. Możesz to również zostawić.
KyleMit
8

Znalazłem oprogramowanie „Running steps” (win32), które robi dokładnie to, czego szukałem: http://www.steppingsoftware.com/

Możesz załadować plik bat, umieścić punkty przerwania / rozpocząć przechodzenie przez niego, widząc dane wyjściowe i zmienne środowiskowe.

Wersja ewaluacyjna pozwala tylko na przejście przez 50 linii ... Czy ktoś ma darmową alternatywę o podobnej funkcjonalności?

Jokkke99BE
źródło
7
Stracili tę domenę i prawdopodobnie wypadli z interesu. Nadal możesz pobrać oprogramowanie testowe ze strony web.archive.org/web/20120421211043/http://..., ale nie możesz już kupić licencji.
twasbrillig
2

Jedyny sposób, jaki przychodzi mi do głowy, to posypanie kodu znakami echos i pauses.

jop
źródło
2

Czy próbowałeś przekierować wynik do pliku? Jak cokolwiek.bat> log.txt

Musisz się upewnić, że w tym przypadku każdy inny wywołany skrypt również loguje się do pliku takiego jak >> log.txt

Ponadto, jeśli umieścisz datę / T i godzinę / T na początku i na końcu tego pliku wsadowego, otrzymasz czas, który był w tym momencie i możesz zmapować czas wykonywania skryptu i kolejność.

Biri
źródło
Zapisanie wyniku do pliku nie pomaga zbytnio, jest wiele skryptów, które są wywoływane, a także jest wiele plików wykonywalnych, które są wykonywane.
Vhaerun
1
Jeśli wszystkie inne skrypty i programy zapisują na stdin, wówczas wszystkie ich komunikaty również są rejestrowane. Jeśli po prostu uruchomisz pakiet i zobaczysz wiele komunikatów uruchomionych, możesz przekierować je do pliku dziennika.
Biri
1

Lub .... Wywołaj swój główny plik .bat z innego pliku .bat i wyślij wynik do pliku wynikowego, tj

runner.bat> mainresults.txt

Gdzie runner.bat wywołuje główny plik .bat

Powinieneś teraz zobaczyć wszystkie działania wykonane w głównym pliku .bat


źródło
0

Dość częstym problemem jest to, że skrypt wsadowy jest uruchamiany przez dwukrotne kliknięcie jego ikony. Ponieważ hostujące cmd.exewystąpienie Command Prompt ( ) również kończy się wtedy, nie jest możliwe odczytanie potencjalnych wyników i komunikatów o błędach.

Aby odczytać takie wiadomości, bardzo ważne jest, aby jawnie otworzyć okno wiersza polecenia, przejść do odpowiedniego katalogu roboczego i uruchomić skrypt wsadowy, wpisując jego ścieżkę / nazwę.

aschipfl
źródło
0

możesz użyć cmd \kna końcu skryptu, aby zobaczyć błąd. nie zamknie wiersza poleceń po zakończeniu wykonywania

Arpan Saini
źródło
-3

lub otwórz okno cmd, a następnie wywołaj pakiet, a dane wyjściowe pojawią się na ekranie.

Pwn
źródło
2
To stwarza tak wiele błędnych założeń, że nie są one nawet odpowiedzią. prawdopodobnie największe z nich to to, że a) zakłada się, że plik wsadowy generuje wyjście konsoli. Nie musi i b) że plik wsadowy faktycznie działa
Leliel,