Wie kann ich ein .BAT-Skript debuggen?

96

Gibt es eine Möglichkeit, ein .bat-Skript zu durchlaufen? Die Sache ist, ich habe ein Build-Skript, das viele andere Skripte aufruft, und ich würde gerne sehen, in welcher Reihenfolge sie aufgerufen werden, damit ich weiß, wo genau ich vorgehen und meine Änderungen hinzufügen muss .

Vhaerun
quelle
4dos hat einen eingebauten Debugger.

Antworten:

69

Ich weiß sowieso nicht, wie ich die Ausführung einer .bat-Datei schrittweise durchführen soll, aber Sie können sie verwenden echound pausebeim Debuggen helfen.

ECHO gibt
eine Nachricht in der Batch-Datei wieder. Zum Beispiel druckt ECHO Hello World Hello World bei der Ausführung auf dem Bildschirm. Ohne @ECHO OFF am Anfang der Batch-Datei erhalten Sie jedoch auch "ECHO Hello World" und "Hello World". Wenn Sie nur eine Leerzeile erstellen möchten, geben Sie ECHO ein. Durch Hinzufügen des Punktes am Ende wird eine leere Zeile erstellt.

PAUSE Fordern Sie
den Benutzer auf, eine beliebige Taste zu drücken, um fortzufahren.

Quelle: Batch-Datei-Hilfe

@ workmad3: answer enthält weitere gute Tipps für die Arbeit mit dem echoBefehl.

Eine weitere hilfreiche Ressource ... DDB: Tipps für DOS-Batchdateien

Eric Schoonover
quelle
1
Ich denke, das sind meine einzigen Möglichkeiten.
Vhaerun
18

Stellen Sie sicher, dass die Skripte keine "Echo aus" -Anweisungen enthalten, und rufen Sie nach dem Aufrufen jedes Skripts "Echo ein" auf, um alle fehlenden Anweisungen zurückzusetzen.

Der Grund dafür ist, dass der Befehlsinterpreter jeden Befehl (nach der Parameterverarbeitung) ausgibt, wenn das Echo eingeschaltet bleibt, bevor er ausgeführt wird. Lässt es für die Verwendung in der Produktion wirklich schlecht aussehen, ist aber für Debugging-Zwecke sehr nützlich, da Sie sehen können, wo die Ausgabe schief gelaufen ist.

Stellen Sie außerdem sicher, dass Sie die ErrorLevels überprüfen, die von den aufgerufenen Batch-Skripten und -Programmen festgelegt wurden. Denken Sie daran, dass hierfür in .bat-Dateien zwei verschiedene Methoden verwendet werden. Wenn Sie ein Programm aufgerufen haben, befindet sich die Fehlerstufe in% ERRORLEVEL%, während aus Batchdateien die Fehlerstufe in der Variablen ErrorLevel zurückgegeben wird und keine% um sie herum benötigt.

workmad3
quelle
13

Angesichts ähnlicher Bedenken fand ich das folgende Tool mit einer trivialen Google-Suche:

JPSofts " Take Command " enthält eine Batchdatei-IDE / einen Debugger. Ihr kurzes Präsentationsvideo zeigt es gut.

Ich benutze die Testversion seit einigen Stunden. Hier ist meine erste bescheidene Meinung:

  • Auf der einen Seite erlaubt es tatsächlich das Debuggen von .bat- und .cmd-Skripten, und ich bin jetzt davon überzeugt, dass es in einigen Fällen helfen kann
  • Andererseits blockiert es manchmal und ich musste es beenden ... besonders beim Debuggen von Indizes (nicht immer systematisch). Es wird weder ein "Aufrufstapel" noch eine Schaltfläche "Aussteigen" angezeigt.

Es ist ein Versuch.

Myobis
quelle
1
Dies sollte wahrscheinlich ein Kommentar sein
KyleMit
8
@KyleMit kannst du bitte erklären warum? Da dies eine eigenständige Lösung ist, die sich von den anderen unterscheidet und die ursprüngliche Frage beantwortet? es ist nicht, weil es kurz genug ist, um in einen Kommentar zu passen, dass es muss ..
Myobis
1
Ich meinte eigentlich wahrscheinlich , dass es in beide Richtungen gehen könnte. Aber es ist eine Art lmgtfy Antwort. Aus dem Antwortbereich der Hilfe : Always quote the most relevant part of an important link. Ohne den Link löst sich diese Antwort auf, was wiederum wahrscheinlich in Ordnung ist, aber normalerweise passt diese Art von Ad-hoc-Vorschlag einer nicht getesteten, proprietären Software im Allgemeinen am besten in einen Kommentar. Fühlen Sie sich frei, es auch zu verlassen.
KyleMit
8

Ich fand "Running Steps" -Software (Win32), die genau das tat, wonach ich suchte: http://www.steppingsoftware.com/

Sie können eine Bat-Datei laden, Haltepunkte setzen / durchgehen, während Sie die Ausgabe- und Umgebungsvariablen anzeigen.

Die Evaluierungsversion erlaubt nur das Durchlaufen von 50 Zeilen ... Hat jemand eine kostenlose Alternative mit ähnlichen Funktionen?

Jokkke99BE
quelle
7
Sie haben diese Domain verloren und sind vermutlich aus dem Geschäft gegangen. Sie können die Evaluierungssoftware weiterhin von web.archive.org/web/20120421211043/http://… herunterladen, jedoch keine Lizenz mehr erwerben.
Twasbrillig
6

Entfernen Sie das @ECHO OFF und rufen Sie Ihre Batch-Datei Redirectin ALL-Ausgabe in eine Protokolldatei auf.

c:> yourbatch.bat (optionale Parameter)> yourlogfile.txt 2> & 1

gefunden unter http://www.robvanderwoude.com/battech_debugging.php

ES KLAPPT!! Vergessen Sie nicht die 2> & 1 ...

WIZ


quelle
2

Ich kann mir nur vorstellen, den Code mit echos und pauses zu besprühen .

jop
quelle
2

Haben Sie versucht, das Ergebnis in eine Datei umzuleiten? Wie auch immer.bat> log.txt

Sie müssen sicherstellen, dass in diesem Fall auch jedes andere aufgerufene Skript wie >> log.txt in der Datei protokolliert

Wenn Sie am Anfang und am Ende dieser Batchdatei ein Datum / T und eine Uhrzeit / T einfügen, erhalten Sie die Uhrzeit zu diesem Zeitpunkt und können die Laufzeit und Reihenfolge Ihres Skripts zuordnen.

Biri
quelle
Das Schreiben des Ergebnisses in eine Datei hilft nicht viel, es werden viele Skripte aufgerufen und es werden auch viele ausführbare Dateien ausgeführt.
Vhaerun
1
Wenn alle anderen Skripte und Programme in den Standard schreiben, werden auch alle ihre Nachrichten protokolliert. Wenn Sie nur den Stapel ausführen und viele Nachrichten ausgeführt werden, können Sie diese in eine Protokolldatei umleiten.
Biri
1

Oder ... Rufen Sie Ihre Haupt-BAT-Datei aus einer anderen BAT-Datei auf und geben Sie das Ergebnis in eine Ergebnisdatei aus, d. H.

running.bat> mainresults.txt

Wobei running.bat die Hauptdatei .bat aufruft

Sie sollten jetzt alle in der .bat-Hauptdatei ausgeführten Aktionen sehen


quelle
0

Ein recht häufiges Problem ist, dass ein Batch-Skript durch Doppelklicken auf das entsprechende Symbol ausgeführt wird. Da die Hosting- cmd.exeInstanz Command Prompt ( ) auch dann beendet wird, ist es nicht möglich, potenzielle Ausgabe- und Fehlermeldungen zu lesen.

Um solche Nachrichten zu lesen, ist es sehr wichtig, dass Sie explizit ein Eingabeaufforderungsfenster öffnen, zum entsprechenden Arbeitsverzeichnis wechseln und das Batch-Skript ausführen, indem Sie dessen Pfad / Namen eingeben.

aschipfl
quelle
0

Sie können cmd \kden Fehler am Ende Ihres Skripts anzeigen. Ihre Eingabeaufforderung wird nach Abschluss der Ausführung nicht geschlossen

Arpan Saini
quelle
-3

Oder öffnen Sie ein Cmd-Fenster und rufen Sie den Stapel von dort aus auf. Die Ausgabe wird auf dem Bildschirm angezeigt.

Pwn
quelle
2
Dies macht so viele falsche Annahmen, dass sie nicht einmal eine Antwort sind. Die wahrscheinlich größten zwei sind: a) Es wird angenommen, dass die Batch-Datei eine Konsolenausgabe erzeugt. Es muss nicht und b) dass die Batch-Datei tatsächlich funktioniert
Leliel