Tôi muốn chương trình gỡ lỗi khởi chạy chương trình perl khi một số điều kiện xảy ra. Một số ngôn ngữ khác có câu lệnh debug() được hỗ trợ bởi thư viện, có bất kỳ câu lệnh tương tự nào trong perl không?Tôi có thể chèn điểm ngắt vào chương trình perl nguồn không?
Trả lời
Bạn đã thử thêm công tắc -d vào dòng shebang ở đầu tập lệnh của mình chưa? Một cái gì đó như
#!/usr/bin/perl -d
use strict;
use warnings;
$|=1;$\="\n";
print "Test";
Nó thực sự phụ thuộc chính xác cách nó được khởi chạy, nhưng ít nhất trong trường hợp đơn giản, điều này sẽ bắt đầu trình gỡ lỗi.
Edit: Sau đó bạn có thể thiết lập một breakpoint trên một dòng cụ thể với một điều kiện nhất định sử dụng
> b [line] [condition]
và nhấn
> c
để tiếp tục chạy kịch bản - trình gỡ lỗi sẽ dừng lại ở dòng được chỉ định khi điều kiện được đáp ứng
Vâng, có điều gì đó sẽ cho phép bạn làm điều gì đó giống như điểm ngắt, nhưng chức năng rộng hơn: Perl Debugger.
Về cơ bản, chuyển đổi
-d
cho phép bạn giao tiếp với thực thi perl và cho phép thực thi perl giao tiếp với bạn.
Đoạn mã perl của tôi là một phần của hệ thống lớn và tôi không thể kiểm soát cách khởi chạy. Có vẻ như tôi chỉ có thể sửa lại tệp nguồn để làm như vậy. – Thomson
@Thomson Tan: Trong trường hợp đó, việc ghi nhật ký sẽ hoạt động tốt hơn. Hãy xem [Log :: Log4perl] (http://search.cpan.org/perldoc?Log::Log4perl). –
Nếu tôi hiểu bạn một cách chính xác, bạn cần phải sử dụng một biến debugger cụ thể trong mã của bạn - $DB::single
. Đặt giá trị này thành giá trị thực trong mã của bạn sẽ khiến trình gỡ lỗi dừng lại trên dòng đó.
$x = 1234;
$DB::single = 1;
enter_problematic_sub_now();
Mã của bạn sau đó sẽ dừng lại ở phù hợp với $ DB :: set duy nhất để 1.
Tất nhiên, nếu bạn không thể thực sự đảm bảo rằng mã của bạn đang chạy trong trình gỡ lỗi sau đó bạn có một vấn đề khác hoàn toàn. Bạn cũng sẽ cũng cần chạy mã của bạn qua perl -d
.
Bạn có nghĩa là nếu chương trình của tôi không chạy trong trình gỡ lỗi, tôi không thể sử dụng $ DB :: đơn như mong đợi? – Thomson
@Thompson: Vâng, đúng vậy. Nếu bạn muốn chương trình Perl được gỡ lỗi, bạn phải chạy chương trình đó dưới trình gỡ lỗi. Theo hiểu biết tốt nhất của tôi, loại điều này đúng với hầu hết các loại gỡ lỗi thời gian thực dựa trên mã nguồn bằng các ngôn ngữ khác - sau khi xuất hiện các đoạn coredumps. – tchrist
@tchrist Tôi không chắc nó hoạt động như thế nào trong Python, nhưng tôi có thể làm 'import pdb; pdb.set_trace() 'bất cứ nơi nào trong mã để phá vỡ tại điểm đó và nhập trình gỡ lỗi. Tôi không phải chạy tập lệnh với bất kỳ công cụ sửa đổi gỡ lỗi đặc biệt nào. –
- 1. MSVC6: Điểm ngắt dừng chương trình
- 2. Cách đặt điểm ngắt trên một tệp cụ thể trong chương trình Perl?
- 3. Tôi có thể chèn đồ thị matplotlib vào Excel theo chương trình không?
- 4. Chèn các điểm ngắt trên Eclipse cho một chương trình Android
- 5. Tôi không thể vô hiệu hóa điểm ngắt (ma)
- 6. Tôi có thể đặt điểm ngắt Firebug trong jsFiddle không?
- 7. Điểm ngắt trong nguồn nền tảng Android
- 8. Tôi có thể phân phối chương trình MATLAB của mình dưới dạng nguồn mở không?
- 9. Eclipse Không thể cài đặt điểm ngắt
- 10. Tại sao có thể _CrtSetBreakAlloc không gây ra điểm ngắt?
- 11. Chèn ngắt dòng vào thông báo IRC
- 12. Tôi có thể thêm điểm ngắt trên CreateProcess trong VS
- 13. Chèn ngắt dòng vào PDF
- 14. Làm cách nào để tôi có thể trực tiếp các chương trình con Perl?
- 15. Tránh điểm chính (điểm vào) trong chương trình C
- 16. Tôi có thể cài đặt ứng dụng vào trình mô phỏng không có mã nguồn không?
- 17. IntelliJ Idea (gỡ lỗi) điểm ngắt có điều kiện phụ thuộc vào các điểm ngắt khác
- 18. Tôi có thể tham chiếu đến chương trình con Perl bằng cách nào?
- 19. điểm ngắt ảo khiến tôi phát điên!
- 20. Tại sao tôi không thể bước vào/qua mã nguồn Java trong NetBeans Debugger?
- 21. SIGTRAP mặc dù không có điểm ngắt được đặt; điểm ngắt phần cứng ẩn?
- 22. Làm thế nào tôi có thể tạm thời dừng STDOUT trong một chương trình Perl?
- 23. Làm thế nào tôi có thể lấy tên của chương trình con hiện tại trong Perl?
- 24. Tại sao các điểm ngắt có điều kiện làm chậm chương trình của tôi xuống quá nhiều?
- 25. Có thể đặt tên điểm ngắt trong GDB không?
- 26. tạm dừng gdb mà không có điểm ngắt
- 27. Tôi có thể cập nhật Mới vào trước khi chèn trình kích hoạt trong sqlite không?
- 28. Sử dụng ggplot2, tôi có thể chèn dấu ngắt trong trục không?
- 29. Chèn ngắt trang vào báo cáo SSRS
- 30. Làm cách nào tôi có thể xác định chương trình các phần tử XML có thể được chèn tiếp theo?
Điều đó thật tuyệt. Có cú pháp tương tự trên cửa sổ không? – Thomson
Tôi tin rằng perl sẽ tôn trọng các thiết bị chuyển mạch ngay cả khi thực thi perl thực thi khởi chạy không phải là một danh sách trong shebang - tức là, ngay cả khi kịch bản trên được bắt đầu như, nói, C: \ Perl \ bin \ perl.exe script.pl , nó vẫn nên bắt đầu trình gỡ rối – ivancho