ฉันจะดีบักสคริปต์. BAT ได้อย่างไร


97

มีวิธีผ่านสคริปต์. bat หรือไม่? สิ่งนี้คือฉันมีสคริปต์สร้างซึ่งเรียกสคริปต์อื่น ๆ มากมายและฉันต้องการดูว่าลำดับที่เรียกว่าอะไรเพื่อที่ฉันจะได้รู้ว่าฉันต้องไปที่ไหนและเพิ่มการแก้ไขของฉัน .


4dos มีบิวด์ในดีบักเกอร์

คำตอบ:


70

ฉันไม่รู้ว่าจะต้องผ่านขั้นตอนการเรียกใช้ไฟล์. bat แต่คุณสามารถใช้echoและpauseเพื่อช่วยในการดีบัก

ECHO
จะสะท้อนข้อความในไฟล์แบตช์ เช่น ECHO Hello World จะพิมพ์ Hello World บนหน้าจอเมื่อดำเนินการ อย่างไรก็ตามหากไม่มี @ECHO OFF ที่จุดเริ่มต้นของไฟล์แบตช์คุณจะได้รับ "ECHO Hello World" และ "Hello World" ด้วย สุดท้ายหากคุณต้องการสร้างบรรทัดว่างให้พิมพ์ ECHO การเพิ่มจุดต่อท้ายจะสร้างบรรทัดว่าง

หยุดชั่วคราวแจ้ง
ให้ผู้ใช้กดปุ่มใด ๆ เพื่อดำเนินการต่อ

ที่มา: Batch File Help

@ workmad3: คำตอบมีเคล็ดลับที่ดีเพิ่มเติมสำหรับการทำงานกับechoคำสั่ง

แหล่งข้อมูลที่เป็นประโยชน์อื่น ๆ ... DDB: DOS Batch File Tips


1
ฉันเดาว่านี่เป็นทางเลือกเดียวของฉัน
Vhaerun

18

ตรวจสอบให้แน่ใจว่าไม่มีคำสั่ง 'echo off' ในสคริปต์และเรียก 'echo on' หลังจากเรียกแต่ละสคริปต์เพื่อรีเซ็ตสิ่งที่คุณพลาดไป

เหตุผลก็คือถ้า echo เปิดทิ้งไว้ตัวแปลคำสั่งจะส่งออกคำสั่งแต่ละคำสั่ง (หลังการประมวลผลพารามิเตอร์) ก่อนที่จะดำเนินการ ทำให้ดูแย่มากสำหรับใช้ในการผลิต แต่มีประโยชน์มากสำหรับวัตถุประสงค์ในการดีบักเนื่องจากคุณสามารถดูได้ว่าเอาต์พุตผิดพลาดตรงไหน

ตรวจสอบให้แน่ใจว่าคุณกำลังตรวจสอบ ErrorLevels ที่กำหนดโดยชุดสคริปต์และโปรแกรมที่เรียกว่า โปรดจำไว้ว่ามี 2 วิธีที่แตกต่างกันที่ใช้ในไฟล์. bat สำหรับสิ่งนี้ หากคุณเรียกโปรแกรมระดับข้อผิดพลาดจะอยู่ใน% ERRORLEVEL% ในขณะที่จากไฟล์แบตช์ระดับข้อผิดพลาดจะถูกส่งกลับในตัวแปร ErrorLevel และไม่จำเป็นต้องมี% อยู่รอบ ๆ


13

ด้วยความกังวลที่คล้ายกันฉันพบเครื่องมือต่อไปนี้จากการค้นหาของ Google เล็กน้อย:

" Take Command " ของ JPSoft มีไฟล์ batch IDE / debugger วิดีโอนำเสนอสั้น ๆของพวกเขาแสดงให้เห็นอย่างสวยงาม

ฉันใช้รุ่นทดลองใช้ตั้งแต่ไม่กี่ชั่วโมง นี่คือความเห็นที่ต่ำต้อยแรกของฉัน:

  • ด้านหนึ่งมันอนุญาตให้มีการดีบักสคริปต์. bat และ. cmd และตอนนี้ฉันเชื่อว่ามันสามารถช่วยได้ในบางกรณี
  • ในทางกลับกันบางครั้งมันก็บล็อกและฉันต้องฆ่ามัน ... โดยเฉพาะเมื่อทำการดีบั๊กตัวห้อย (ไม่ใช่ระบบเสมอไป) .. มันจะไม่แสดง "call stack" หรือปุ่ม "step out"

มันพยายามอย่างมาก


1
นี่น่าจะเป็นความคิดเห็น
KyleMit

8
@KyleMit คุณช่วยอธิบายได้ไหมว่าทำไม? เนื่องจากนี่เป็นโซลูชันแบบสแตนด์อโลนที่แตกต่างจากที่อื่นและตอบคำถามเดิมได้หรือไม่ ไม่ใช่เพราะมันสั้นพอที่จะใส่ความคิดเห็นได้ แต่มันต้อง ..
Myobis

1
ที่จริงฉันอาจจะหมายความว่ามันสามารถไปทางใดทางหนึ่ง แต่มันเป็นชนิดของlmgtfyคำตอบ จากส่วนคำตอบของศูนย์ช่วยเหลือ : Always quote the most relevant part of an important link. หากไม่มีลิงก์คำตอบนี้ก็จะหายไปซึ่งอาจจะใช้ได้อีกครั้ง แต่โดยทั่วไปแล้วคำแนะนำเฉพาะกิจประเภทนี้ของซอฟต์แวร์ที่ไม่ผ่านการทดสอบและเป็นกรรมสิทธิ์โดยทั่วไปจะเหมาะสมที่สุดในความคิดเห็น อย่าลังเลที่จะทิ้งไว้เช่นกัน
KyleMit

8

ฉันพบว่าซอฟต์แวร์ 'กำลังรันขั้นตอน' (win32) ทำในสิ่งที่ฉันกำลังมองหา: http://www.steppingsoftware.com/

คุณสามารถโหลดไฟล์ bat วางเบรกพอยต์ / เริ่มก้าวผ่านมันในขณะที่เห็นผลลัพธ์และตัวแปรสภาพแวดล้อม

รุ่นการประเมินอนุญาตให้ก้าวผ่าน 50 บรรทัดเท่านั้น ... ใครมีทางเลือกฟรีที่มีฟังก์ชันการทำงานคล้ายกันบ้าง?


7
พวกเขาสูญเสียโดเมนนั้นไปและน่าจะเลิกกิจการไปแล้ว คุณยังสามารถดาวน์โหลดซอฟต์แวร์การประเมินได้จากweb.archive.org/web/20120421211043/http://…แต่ไม่สามารถซื้อใบอนุญาตได้อีกต่อไป
twasbrillig

6

ลบ @ECHO OFF และเรียกไฟล์แบตช์ของคุณเปลี่ยนเส้นทางเอาต์พุตทั้งหมดไปยังไฟล์บันทึก ..

c:> yourbatch.bat (พารามิเตอร์ทางเลือก)> yourlogfile.txt 2> & 1

พบได้ที่http://www.robvanderwoude.com/battech_debugging.php

มันได้ผล!! อย่าลืม 2> & 1 ...

พ่อมด



2

คุณพยายามเปลี่ยนเส้นทางผลลัพธ์เป็นไฟล์หรือไม่? เช่น what.bat> log.txt

คุณต้องตรวจสอบให้แน่ใจว่าในกรณีนี้ทุกสคริปต์อื่น ๆ ที่เรียกว่ากำลังเข้าสู่ไฟล์เช่น >> log.txt

นอกจากนี้หากคุณใส่วันที่ / T และเวลา / T ในตอนต้นและตอนท้ายของไฟล์แบตช์นั้นคุณจะได้รับเวลาที่อยู่ ณ จุดนั้นและคุณสามารถแมปเวลาและลำดับการทำงานของสคริปต์ของคุณได้


การเขียนผลลัพธ์ลงในไฟล์ไม่ได้ช่วยอะไรมากนักมีสคริปต์จำนวนมากที่ถูกเรียกและยังมีไฟล์ปฏิบัติการจำนวนมากที่ถูกเรียกใช้งาน
Vhaerun

1
หากสคริปต์และโปรแกรมอื่น ๆ ทั้งหมดเขียนลงใน stdin ข้อความทั้งหมดจะถูกบันทึกด้วย หากคุณเพิ่งดำเนินการแบตช์และคุณเห็นข้อความจำนวนมากทำงานอยู่คุณสามารถเปลี่ยนเส้นทางไปยังไฟล์บันทึกได้
Biri

1

หรือ .... เรียกไฟล์. bat หลักของคุณจากไฟล์. bat อื่นและส่งออกผลลัพธ์ไปยังไฟล์ผลลัพธ์เช่น

Runner.bat> mainresults.txt

โดยที่ runner.bat เรียกไฟล์. bat หลัก

คุณควรเห็นการดำเนินการทั้งหมดที่ดำเนินการในไฟล์. bat หลักทันที


0

คุณสามารถใช้cmd \kในตอนท้ายของสคริปต์เพื่อดูข้อผิดพลาด มันจะไม่ปิดพรอมต์คำสั่งของคุณหลังจากการดำเนินการเสร็จสิ้น


cmd /Kจริงๆแล้วมันเป็น อย่างไรก็ตามมีอะไรผิดปกติpause?
aschipfl

0

ปัญหาที่เกิดขึ้นบ่อยครั้งคือชุดสคริปต์ทำงานโดยดับเบิลคลิกที่ไอคอน เนื่องจากcmd.exeอินสแตนซ์Command Prompt ( ) ของโฮสติ้งจะยุติลงทันทีที่สคริปต์ชุดงานเสร็จสิ้นจึงไม่สามารถอ่านผลลัพธ์ที่เป็นไปได้และข้อความแสดงข้อผิดพลาด

ในการอ่านข้อความดังกล่าวเป็นสิ่งสำคัญมากที่คุณจะต้องเปิดหน้าต่างพรอมต์คำสั่งอย่างชัดเจนเคลื่อนย้ายไปยังไดเร็กทอรีการทำงานที่เกี่ยวข้องและรันสคริปต์แบตช์โดยพิมพ์พา ธ / ชื่อ


-1

หรือเปิดหน้าต่าง cmd จากนั้นเรียกชุดงานจากที่นั่นผลลัพธ์จะปรากฏบนหน้าจอ


2
ทำให้สมมติฐานผิด ๆ มากมายจนไม่อาจเป็นคำตอบได้ อาจเป็นสองตัวที่ใหญ่ที่สุดคือก) ไฟล์แบตช์จะถือว่าสร้างเอาต์พุตคอนโซล ไม่จำเป็นต้องและ b) ไฟล์แบตช์ใช้งานได้จริง
Leliel

@Leliel โฆษณาก) ใช่ไฟล์แบตช์อาจหรือไม่อาจสร้างเอาต์พุตคอนโซล แต่คุณจะไม่พบเมื่อคุณคลิกสองครั้งที่ไอคอน แต่เมื่อเรียกใช้จากcmd.exeจะแสดงในกรณี; โฆษณา b) การอ้างสิทธิ์ของคุณไม่ถูกต้องไฟล์แบตช์ไม่ต้องทำงานอาจมีข้อผิดพลาดทางไวยากรณ์ร้ายแรงซึ่งมักจะสร้างข้อความแสดงข้อผิดพลาดของคอนโซล ...
aschipfl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.