Comment puis-je déboguer un script .BAT?

96

Existe-t-il un moyen de parcourir un script .bat? Le fait est que j'ai un script de construction, qui appelle beaucoup d'autres scripts, et j'aimerais voir quel est l'ordre dans lequel ils sont appelés, afin que je sache exactement où je dois aller et ajouter mes modifications .

Vhaerun
la source
4dos a un débogueur intégré.

Réponses:

69

Je ne sais pas de toute façon pour exécuter l'exécution d'un fichier .bat mais vous pouvez utiliser echoet pauseaider au débogage.

ECHO
fera écho à un message dans le fichier de commandes. Tels que ECHO Hello World imprimera Hello World sur l'écran une fois exécuté. Cependant, sans @ECHO OFF au début du fichier de commandes, vous obtiendrez également «ECHO Hello World» et «Hello World». Enfin, si vous souhaitez simplement créer une ligne vide, tapez ECHO. l'ajout du point à la fin crée une ligne vide.

PAUSE
Invite l'utilisateur à appuyer sur n'importe quelle touche pour continuer.

Source: Aide sur les fichiers batch

@ workmad3: answer a d'autres bons conseils pour travailler avec la echocommande.

Une autre ressource utile ... DDB: Astuces pour les fichiers batch DOS

Eric Schoonover
la source
1
Je suppose que ce sont mes seules options.
Vhaerun
18

Assurez-vous qu'il n'y a pas d'instructions «echo off» dans les scripts et appelez «echo on» après avoir appelé chaque script pour réinitialiser ceux que vous avez manqués.

La raison en est que si l'écho est laissé activé, l'interpréteur de commandes affichera chaque commande (après le traitement des paramètres) avant de l'exécuter. Le rend vraiment mauvais pour une utilisation en production, mais très utile à des fins de débogage, car vous pouvez voir où la sortie a mal tourné.

Assurez-vous également de vérifier les niveaux d'erreur définis par les scripts et programmes batch appelés. N'oubliez pas qu'il existe 2 méthodes différentes utilisées dans les fichiers .bat pour cela. Si vous avez appelé un programme, le niveau d'erreur est dans% ERRORLEVEL%, tandis qu'à partir des fichiers de commandes, le niveau d'erreur est renvoyé dans la variable ErrorLevel et n'a pas besoin de% autour de lui.

workmad3
la source
13

Face à une préoccupation similaire, j'ai trouvé l'outil suivant avec une recherche Google triviale:

" Take Command " de JPSoft comprend un IDE / débogueur de fichier batch. Leur courte vidéo de présentation le démontre bien.

J'utilise la version d'essai depuis quelques heures. Voici mon premier avis humble:

  • D'un côté, il permet en effet de déboguer les scripts .bat et .cmd et je suis maintenant convaincu que cela peut aider dans certains cas
  • Par contre, il se bloque parfois et j'ai dû le tuer ... spécialement lors du débogage des indices (pas toujours systématiquement) .. il n'affiche pas de "pile d'appels" ni de bouton "sortir".

Il mérite un essai.

Myobis
la source
1
Cela devrait probablement être un commentaire
KyleMit
8
@KyleMit pouvez-vous expliquer pourquoi? car il s'agit d'une solution autonome distincte des autres et qui répond à la question initiale? ce n'est pas parce qu'il est assez court pour tenir dans un commentaire, qu'il le faut ..
Myobis
1
En fait, je voulais dire probablement , en ce sens que cela pouvait aller dans les deux sens. Mais c'est une sorte de réponse lmgtfy . Du Centre d' aide réponse section: Always quote the most relevant part of an important link. Sans le lien, cette réponse se dissout, ce qui, encore une fois, est probablement bien, mais ce type de suggestion ad hoc d'un logiciel propriétaire non testé conviendrait généralement mieux à un commentaire. N'hésitez pas à le laisser également.
KyleMit
8

J'ai trouvé le logiciel 'running steps' (win32) faisant exactement ce que je cherchais: http://www.steppingsoftware.com/

Vous pouvez charger un fichier bat, placer des points d'arrêt / commencer à le parcourir tout en voyant les variables de sortie et d'environnement.

La version d'évaluation ne permet que de parcourir 50 lignes ... Quelqu'un a-t-il une alternative gratuite avec des fonctionnalités similaires?

Jokkke99BE
la source
7
Ils ont perdu ce domaine et ont probablement fait faillite. Vous pouvez toujours télécharger le logiciel d'évaluation depuis web.archive.org/web/20120421211043/http://... mais ne pouvez plus acheter de licence.
twasbrillig
2

La seule façon dont je peux penser est de spinkle le code avec echos et pauses.

sauter
la source
2

Avez-vous essayé de rediriger le résultat vers un fichier? Comme tout .bat> log.txt

Vous devez vous assurer que dans ce cas, tous les autres scripts appelés se connectent également au fichier comme >> log.txt

De plus, si vous mettez une date / T et une heure / T au début et à la fin de ce fichier de commandes, vous obtiendrez les heures auxquelles il était à ce moment-là et vous pourrez mapper le temps d'exécution et l'ordre de votre script.

Biri
la source
Ecrire le résultat dans un fichier n'aide pas beaucoup, il y a beaucoup de scripts qui sont appelés, et aussi, il y a beaucoup d'exécutables qui sont exécutés.
Vhaerun
1
Si tous les autres scripts et programmes écrivent sur le stdin, tous leurs messages sont également enregistrés. Si vous exécutez simplement le lot et que de nombreux messages s'affichent, vous pouvez les rediriger vers un fichier journal.
Biri
1

Ou .... Appelez votre fichier .bat principal à partir d'un autre fichier .bat et affichez le résultat dans un fichier de résultat, c.-à-d.

runner.bat> mainresults.txt

Où runner.bat appelle le fichier .bat principal

Vous devriez voir toutes les actions effectuées dans le fichier principal .bat maintenant


la source
0

Un problème assez fréquent est qu'un script batch est exécuté en double-cliquant sur son icône. Étant donné que l' cmd.exeinstance de l' invite de commande d'hébergement ( ) se termine également, il n'est pas possible de lire les messages d'erreur et de sortie potentiels.

Pour lire de tels messages, il est très important que vous ouvriez explicitement une fenêtre d'invite de commandes, que vous vous dirigiez vers le répertoire de travail applicable et que vous exécutiez le script de commandes en tapant son chemin / nom.

aschipfl
la source
0

vous pouvez utiliser cmd \kà la fin de votre script pour voir l'erreur. il ne fermera pas votre invite de commande une fois l'exécution terminée

Arpan Saini
la source
-3

ou, ouvrez une fenêtre cmd, puis appelez le lot à partir de là, la sortie sera à l'écran.

Pwn
la source
2
Cela fait tellement d'hypothèses erronées que cela ne constitue même pas une réponse. probablement les deux plus importants sont que a) le fichier batch est supposé produire une sortie console. Il n'est pas nécessaire, et b) que le fichier de commandes fonctionne réellement
Leliel