Giải pháp thay thế phức tạp là thêm nhãn và điều kiện goto
báo cáo trong suốt mã của bạn. Nhưng tùy thuộc vào mức độ bạn muốn mô phỏng tính năng này một cách tồi tệ, nó có thể đáng giá. phiên gỡ lỗi
POINT1: $GOTO=""; # $GOTO is our fake variable that we only set from the debugger
($a,$b,$c)=(1,2,3);
POINT2: $GOTO="";
if ($a < $b) {
goto $GOTO if $GOTO;
if ($a > $c) {
goto $GOTO if $GOTO;
print "foo\n";
} else {
goto $GOTO if $GOTO;
print "bar\n";
}
goto $GOTO if $GOTO;
} else {
goto $GOTO if $GOTO;
print "nothing\n";
goto $GOTO if $GOTO;
}
mẫu:
$ perl -d debuggoto.pl
Loading DB routines from perl5db.pl version 1.28
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(debuggoto.pl:1): POINT1: $GOTO=""; # $GOTO is our fake variable that we only set from the debugger
DB<1> n
main::(debuggoto.pl:2): ($a,$b,$c)=(1,2,3);
DB<1>
main::(debuggoto.pl:3): POINT2: $GOTO="";
DB<1>
main::(debuggoto.pl:4): if ($a < $b) {
DB<1>
main::(debuggoto.pl:5): goto $GOTO if $GOTO;
DB<1>
main::(debuggoto.pl:6): if ($a > $c) {
DB<1>
main::(debuggoto.pl:10): goto $GOTO if $GOTO;
DB<1>
main::(debuggoto.pl:11): print "bar\n";
DB<1>
bar
main::(debuggoto.pl:13): goto $GOTO if $GOTO;
DB<1> $GOTO="POINT2"
DB<2> n
main::(debuggoto.pl:3): POINT2: $GOTO="";
DB<2> $c=0
DB<3> n
main::(debuggoto.pl:4): if ($a < $b) {
DB<3>
main::(debuggoto.pl:5): goto $GOTO if $GOTO;
DB<3>
main::(debuggoto.pl:6): if ($a > $c) {
DB<3>
main::(debuggoto.pl:7): goto $GOTO if $GOTO;
DB<3>
main::(debuggoto.pl:8): print "foo\n";
DB<3>
foo
main::(debuggoto.pl:13): goto $GOTO if $GOTO;
DB<3>
Debugged program terminated. Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.
DB<3>
Use `q' to quit or `R' to restart. `h q' for details.
DB<3>
Tôi tự hỏi nếu nó sẽ có thể xây dựng một debugger có sử dụng ý tưởng này.
Tôi đang cố gắng tưởng tượng những gì bạn muốn làm, nhưng không thể. Tôi sẽ đoán thay thế. B :: Util hoặc B :: Hooks :: OP :: Kiểm tra có thể hữu ích; chỉnh sửa optree và thiết lập op tiếp theo cho cái bạn muốn thực thi; hoặc móc một mã op và chạy khi nó được thực hiện. Một runloop tùy chỉnh cũng có thể hữu ích. Nhưng về cơ bản, bạn ở một mình ở đây; du hành thời gian không phải là một tính năng của perl5db. – jrockway
Không đi du lịch thời gian. Tôi đang tìm cách tùy ý thiết lập thời điểm thực hiện cho một vị trí cụ thể, * mà không cần phải quan tâm nhiều lắm * vì sự tỉnh táo của việc làm như vậy. –
Tùy chỉnh runloop âm thanh tốt sau đó. Những gì bạn muốn làm là rất lạ, mặc dù, đó là lý do tại sao nó không được thực hiện. – jrockway