Làm cách nào để gỡ lỗi tập lệnh .BAT?


96

Có cách nào để chuyển qua tập lệnh .bat không? Vấn đề là, tôi có một tập lệnh xây dựng, nó gọi rất nhiều tập lệnh khác và tôi muốn xem thứ tự mà chúng được gọi là gì, để tôi có thể biết chính xác nơi tôi phải tiếp tục và thêm các sửa đổi của mình .


4dos có một trình gỡ lỗi tích hợp.

Câu trả lời:


69

Tôi không biết cách thực hiện tệp .bat nhưng bạn có thể sử dụng echopauseđể giúp gỡ lỗi.

ECHO
Sẽ gửi lại một tin nhắn trong tệp loạt. Chẳng hạn như ECHO Hello World sẽ in Hello World trên màn hình khi thực thi. Tuy nhiên, nếu không có @ECHO OFF ở đầu tệp loạt, bạn cũng sẽ nhận được "ECHO Hello World" và "Hello World". Cuối cùng, nếu bạn chỉ muốn tạo một dòng trống, hãy nhập ECHO. thêm dấu chấm vào cuối sẽ tạo ra một dòng trống.

TẠM DỪNG
Nhắc người dùng nhấn phím bất kỳ để tiếp tục.

Nguồn: Batch File Help

@ workmad3: answer có nhiều mẹo hay hơn để làm việc với echolệnh.

Một tài nguyên hữu ích khác ... DDB: Mẹo tệp hàng loạt DOS


1
Tôi đoán đó là những lựa chọn duy nhất của tôi.
Vhaerun

18

Đảm bảo không có câu lệnh 'echo off' nào trong các tập lệnh và gọi 'echo on' sau khi gọi từng tập lệnh để đặt lại bất kỳ câu lệnh nào bạn đã bỏ lỡ.

Lý do là nếu echo được bật, thì trình thông dịch lệnh sẽ xuất ra từng lệnh (sau khi xử lý tham số) trước khi thực thi nó. Làm cho nó trông thực sự xấu khi sử dụng trong sản xuất, nhưng rất hữu ích cho mục đích gỡ lỗi vì bạn có thể thấy đầu ra bị sai ở đâu.

Ngoài ra, hãy đảm bảo rằng bạn đang kiểm tra các Mức độ Lỗi được đặt bởi các chương trình và tập lệnh hàng loạt. Hãy nhớ rằng có 2 phương pháp khác nhau được sử dụng trong tệp .bat cho việc này. Nếu bạn đã gọi một chương trình, thì mức Lỗi nằm trong% ERRORLEVEL%, trong khi từ các tệp hàng loạt, mức lỗi được trả về trong biến ErrorLevel và không cần% xung quanh nó.


13

Đối mặt với mối quan tâm tương tự, tôi đã tìm thấy công cụ sau với một tìm kiếm nhỏ trên Google:

" Take Command " của JPSoft bao gồm một IDE / trình gỡ lỗi tập tin hàng loạt. Video trình bày ngắn của họ thể hiện điều đó một cách độc đáo.

Tôi đang sử dụng phiên bản dùng thử kể từ một vài giờ. Đây là ý kiến ​​khiêm tốn đầu tiên của tôi:

  • Về một mặt, nó thực sự cho phép gỡ lỗi các tập lệnh .bat và .cmd và bây giờ tôi tin rằng nó có thể giúp ích trong một số trường hợp
  • Mặt khác, đôi khi nó chặn và tôi phải giết nó ... đặc biệt khi gỡ lỗi các chỉ số dưới (không phải lúc nào cũng có hệ thống) .. nó không hiển thị "ngăn xếp cuộc gọi" cũng như nút "bước ra".

Nó yêu thích một thử.


1
Điều này có lẽ phải là một bình luận
KyleMit

8
@KyleMit bạn có thể vui lòng giải thích tại sao không? vì đây là một giải pháp độc lập khác với những giải pháp khác và điều đó có trả lời được câu hỏi ban đầu không? nó không phải là bởi vì nó là đủ ngắn để phù hợp trong một chú thích, mà nó phải ..
Myobis

1
Tôi thực sự có nghĩa là có lẽ , trong đó nó có thể đi theo một trong hai cách. Nhưng đó là loại một lmgtfy câu trả lời. Từ trung tâm trợ giúp trả lời phần: Always quote the most relevant part of an important link. Nếu không có liên kết, câu trả lời này sẽ biến mất, một lần nữa, có lẽ là tốt, nhưng thường thì loại gợi ý đặc biệt này của một phần mềm độc quyền, chưa được kiểm tra thường phù hợp nhất trong một nhận xét. Hãy để lại nó là tốt.
KyleMit

8

Tôi thấy phần mềm 'các bước đang chạy' (win32) đang làm chính xác những gì tôi đang tìm kiếm: http://www.steppingsoftware.com/

Bạn có thể tải một tệp bat, đặt các điểm ngắt / bắt đầu bước qua nó trong khi xem các biến đầu ra và môi trường.

Phiên bản đánh giá chỉ cho phép bước qua 50 dòng ... Có ai có giải pháp thay thế miễn phí với chức năng tương tự không?


7
Họ đã mất miền đó và có lẽ đã ngừng kinh doanh. Bạn vẫn có thể tải xuống phần mềm đánh giá từ web.archive.org/web/20120421211043/http://… nhưng không thể mua bản quyền được nữa.
twasbrillig

6

loại bỏ @ECHO OFF và gọi tệp lô của bạn chuyển hướng TẤT CẢ đầu ra thành tệp nhật ký ..

c:> yourbatch.bat (tham số tùy chọn)> yourlogfile.txt 2> & 1

tìm thấy tại http://www.robvanderwoude.com/battech_debugging.php

THÀNH CÔNG !! đừng quên 2> & 1 ...

WIZ


2

Cách duy nhất tôi có thể nghĩ đến là lấp lánh mã với echos và pauses.


2

Bạn đã cố định tuyến lại kết quả thành một tệp chưa? Giống như any.bat> log.txt

Bạn phải đảm bảo rằng trong trường hợp này, mọi tập lệnh được gọi khác cũng đang đăng nhập vào tệp như >> log.txt

Ngoài ra, nếu bạn đặt ngày / T và thời gian / T ở đầu và cuối của tệp lô đó, bạn sẽ nhận được thời gian tại thời điểm đó và bạn có thể lập bản đồ thời gian chạy tập lệnh và thứ tự của mình.


Việc ghi kết quả vào một tệp không giúp ích được gì nhiều, có rất nhiều đoạn mã được gọi và cũng có rất nhiều tệp thực thi được thực thi.
Vhaerun

1
Nếu tất cả các tập lệnh và chương trình khác ghi vào stdin thì tất cả các tin nhắn của chúng cũng được ghi lại. Nếu bạn chỉ thực hiện lô và bạn thấy nhiều thông báo đang chạy, thì bạn có thể chuyển hướng chúng đến tệp nhật ký.
Biri 3/10/08

1

Hoặc .... Gọi tệp .bat chính của bạn từ tệp .bat khác và xuất kết quả thành tệp kết quả tức là

runner.bat> mainresults.txt

Nơi runner.bat gọi tệp .bat chính

Bạn sẽ thấy tất cả các hành động được thực hiện trong tệp .bat chính ngay bây giờ


0

Một vấn đề khá thường xuyên là tập lệnh hàng loạt được chạy bằng cách nhấp đúp vào biểu tượng của nó. Vì cá thể Command Prompt ( cmd.exe) lưu trữ cũng kết thúc sau đó, nên không thể đọc các thông báo lỗi và đầu ra tiềm ẩn.

Để đọc các thông báo như vậy, điều rất quan trọng là bạn phải mở rõ ràng cửa sổ Command Prompt, chuyển đến thư mục làm việc thích hợp và chạy tập lệnh loạt bằng cách nhập đường dẫn / tên của nó.


0

bạn có thể sử dụng cmd \kở cuối tập lệnh của mình để xem lỗi. nó sẽ không đóng dấu nhắc lệnh của bạn sau khi thực hiện xong


-3

hoặc, mở một cửa sổ cmd, sau đó gọi lô từ đó, kết quả sẽ hiển thị trên màn hình.


2
Điều này tạo ra rất nhiều giả định sai lầm thậm chí không phải là câu trả lời. có lẽ hai điều lớn nhất là a) tệp loạt được giả định để tạo ra đầu ra bảng điều khiển. Nó không phải, và b) rằng tập tin thực thi được thực sự làm việc
Leliel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.