.BAT komut dosyasında nasıl hata ayıklayabilirim?


97

Bir .bat betiğinden geçmenin bir yolu var mı? Mesele şu ki, birçok başka komut dosyasını çağıran bir derleme komut dosyam var ve çağrıldıkları sıranın ne olduğunu görmek istiyorum, böylece tam olarak nereye gitmem gerektiğini bilebilir ve değişikliklerimi ekleyebilirim .


4dos, hata ayıklayıcıda bir yapıya sahiptir.

Yanıtlar:


70

Bir .bat dosyasının yürütülmesi için nasıl bir adım atacağımı bilmiyorum, ancak hata ayıklamaya yardımcı olmak için echove kullanabilirsiniz pause.

ECHO
, toplu iş dosyasında bir mesajı yansıtır. ECHO Hello World gibi, çalıştırıldığında ekrana Hello World yazacaktır. Bununla birlikte, toplu iş dosyasının başında @ECHO OFF olmazsa, "ECHO Merhaba Dünya" ve "Merhaba Dünya" da alırsınız. Son olarak, sadece boş bir satır oluşturmak istiyorsanız, ECHO yazın. noktayı sonuna eklemek boş bir satır oluşturur.

DURAKLAT
Kullanıcıdan devam etmek için herhangi bir tuşa basmasını isteyin.

Kaynak: Toplu Dosya Yardımı

@ workmad3: answer, echokomutla çalışmak için daha iyi ipuçlarına sahiptir .

Başka bir yararlı kaynak ... DDB: DOS Toplu Dosya İpuçları


1
Sanırım bunlar benim tek seçeneğim.
Vhaerun

18

Komut dosyalarında 'echo off' ifadesi olmadığından emin olun ve kaçırdıklarınızı sıfırlamak için her komut dosyasını çağırdıktan sonra 'echo on' çağrısı yapın.

Bunun nedeni, echo açık bırakılırsa, komut yorumlayıcısının her komutu çalıştırmadan önce (parametre işlemeden sonra) çıktı vermesidir. Üretimde kullanmak için gerçekten kötü görünmesini sağlar, ancak çıktının nerede yanlış gittiğini görebileceğiniz için hata ayıklama amaçları için çok yararlıdır.

Ayrıca, çağrılan toplu komut dosyaları ve programlar tarafından ayarlanan Hata Düzeylerini kontrol ettiğinizden emin olun. Bunun için .bat dosyalarında kullanılan 2 farklı yöntem olduğunu unutmayın. Bir programı çağırdıysanız, Hata düzeyi% ERRORLEVEL% içindeyken, toplu iş dosyalarından hata düzeyi ErrorLevel değişkeninde döndürülür ve etrafında% 's gerekmez.


13

Benzer bir endişeyle karşılaştığımda, aşağıdaki aracı önemsiz bir Google aramasıyla buldum:

JPSoft'un " Take Command ", bir toplu iş dosyası IDE / hata ayıklayıcı içerir. Onların kısa sunum Video güzel bunu gösteriyor.

Birkaç saattir deneme sürümünü kullanıyorum. İşte ilk mütevazı düşüncem:

  • Bir tarafta, .bat ve .cmd komut dosyalarında hata ayıklamaya gerçekten izin veriyor ve artık bazı durumlarda yardımcı olabileceğine inanıyorum
  • Öte yandan, bazen engelliyor ve onu öldürmek zorunda kaldım ... özellikle aboneliklerde hata ayıklarken (her zaman sistematik olarak değil) .. bir "çağrı yığını" veya "dışarı çıkma" düğmesi göstermiyor.

Bir denemek var.


1
Bu muhtemelen bir yorum olmalı
KyleMit

8
@KyleMit lütfen nedenini açıklar mısınız? çünkü bu diğerlerinden farklı bağımsız bir çözümdür ve bu orijinal soruyu yanıtlar mı? bir yoruma sığacak kadar kısa olduğu için değil, öyle olması gerekiyor ..
Myobis

1
Aslında muhtemelen her iki şekilde de gidebileceğini söyledim. Ama bu biraz hızlı bir cevap. Gönderen yardım merkezi cevap bölümünde: Always quote the most relevant part of an important link. Bağlantı olmadan, bu cevap çözülür, ki bu yine muhtemelen iyidir, ancak tipik olarak test edilmemiş, özel mülk bir yazılımın bu tür geçici önerisi genellikle bir yoruma en iyi uyacaktır. Siz de bırakmaktan çekinmeyin.
KyleMit

8

Tam olarak aradığımı yapan 'çalışan adımlar' (win32) yazılımı buldum: http://www.steppingsoftware.com/

Çıktı ve ortam değişkenlerini görürken bir yarasa dosyası yükleyebilir, kesme noktaları yerleştirebilir / adım atmaya başlayabilirsiniz.

Değerlendirme sürümü sadece 50 satırdan geçmeye izin veriyor ... Benzer işlevselliğe sahip ücretsiz bir alternatifi olan var mı?


7
Bu alanı kaybettiler ve muhtemelen işsiz kaldılar. Değerlendirme yazılımını web.archive.org/web/20120421211043/http://… adresinden hala indirebilirsiniz, ancak artık bir lisans satın alamazsınız.
twasbrillig

6

@ECHO OFF'u yeniden düzenleyin ve toplu iş dosyanızı çağırın TÜM çıktısını bir günlük dosyasına yönlendirin ..

c:> yourbatch.bat (isteğe bağlı parametreler)> logfile.txt 2> & 1

bulunan http://www.robvanderwoude.com/battech_debugging.php

İŞE YARIYOR!! unutma 2> & 1 ...

WIZ


2

Aklıma gelen tek yol, kodu echos ve pauses ile karıştırmaktır.


2

Sonucu bir dosyaya yeniden yönlendirmeyi denediniz mi? Whatever.bat> log.txt gibi

Bu durumda, adı verilen her komut dosyasının da >> log.txt gibi dosyaya giriş yaptığından emin olmalısınız.

Ayrıca, bu toplu iş dosyasının başına ve sonuna bir tarih / T ve saat / T koyarsanız, o noktadaki zamanları alırsınız ve komut dosyanızın çalışma süresini ve sırasını eşleyebilirsiniz.


Sonucu bir dosyaya yazmak o kadar da yardımcı olmaz, çağrılan birçok komut dosyası vardır ve ayrıca çalıştırılan birçok yürütülebilir dosya vardır.
Vhaerun

1
Diğer tüm komut dosyası ve programlar stdin'e yazarsa, tüm mesajları da günlüğe kaydedilir. Yalnızca toplu işi yürütürseniz ve üzerinde çalışan çok sayıda ileti görürseniz, bunları bir günlük dosyasına yeniden yönlendirebilirsiniz.
Biri

1

Veya .... Ana .bat dosyanızı başka bir .bat dosyasından çağırın ve sonucu bir sonuç dosyasına (örn.

runner.bat> mainresults.txt

Runner.bat'ın ana .bat dosyasını çağırdığı yer

Şimdi ana .bat dosyasında gerçekleştirilen tüm eylemleri görmelisiniz.


0

cmd \kHatayı görmek için komut dosyanızın sonunda kullanabilirsiniz . yürütme tamamlandıktan sonra komut isteminizi kapatmaz


Aslında öyle cmd /K. Her neyse, neyin var pause?
aschipfl

0

Oldukça sık karşılaşılan bir sorun, bir toplu komut dosyasının simgesine çift tıklanarak çalıştırılmasıdır. Barındıran Komut İstemi ( cmd.exe) örneği de toplu komut dosyası biter bitmez sona erdiğinden, olası çıktı ve hata mesajlarını okumak mümkün değildir.

Bu tür mesajları okumak için, açıkça bir Komut İstemi penceresi açmanız, uygun çalışma dizinine gitmeniz ve yol / adını yazarak toplu komut dosyasını çalıştırmanız çok önemlidir.


-1

veya bir cmd penceresi açın ve oradan partiyi çağırın, çıktı ekranda olacaktır.


2
Bu, bir cevap bile olmayacak kadar çok yanlış varsayım yapıyor. muhtemelen en büyük ikisi a) toplu iş dosyasının konsol çıktısı oluşturduğunun varsayılmasıdır.
Gerekmiyor

@Leliel, ad a) evet, toplu iş dosyası konsol çıktısı üretebilir veya üretmeyebilir, ancak simgesini çift tıkladığınızda bulamayacaksınız, ancak buradan çalıştırdığınızda bunu cmd.exegösterecektir; ad b) iddianız yanlış, toplu iş dosyasının çalışması gerekmiyor, hatta genellikle bir konsol hata mesajı oluşturan ölümcül bir sözdizimi hatası bile olabilir…
aschipfl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.