ນີ້ແມ່ນຄໍາສັ່ງ perldebug ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
perldebug - ການດີບັກ Perl
ລາຍລະອຽດ
ກ່ອນອື່ນ ໝົດ, ທ່ານໄດ້ພະຍາຍາມໃຊ້ -w ສະຫຼັບ?
ຖ້າທ່ານໃຫມ່ກັບ Perl debugger, ທ່ານອາດຈະມັກອ່ານ perldebtut, ເຊິ່ງເປັນບົດສອນ.
ການແນະນຳຕົວດີບັກ.
ໄດ້ Perl Debugger
ຖ້າທ່ານເອີ້ນ Perl ກັບ -d ສະຫຼັບ, ສະຄຣິບຂອງທ່ານເຮັດວຽກພາຍໃຕ້ Perl source debugger.
ນີ້ເຮັດວຽກຄືກັບສະພາບແວດລ້ອມ Perl ແບບໂຕ້ຕອບ, ການກະຕຸ້ນເຕືອນສໍາລັບຄໍາສັ່ງ debugger ທີ່ປ່ອຍໃຫ້
ທ່ານກວດເບິ່ງລະຫັດແຫຼ່ງ, ກໍານົດຈຸດຢຸດ, ໄດ້ຮັບ stack backtraces, ປ່ຽນຄ່າຂອງ
ຕົວແປ, ແລະອື່ນໆ. ອັນນີ້ສະດວກຫຼາຍທີ່ເຈົ້າມັກຈະດັບໄຟດີບັກທັງໝົດດ້ວຍຕົວມັນເອງ
ພຽງແຕ່ເພື່ອທົດສອບ Perl ກໍ່ສ້າງແບບໂຕ້ຕອບເພື່ອເບິ່ງວ່າພວກເຂົາເຮັດຫຍັງ. ຍົກຕົວຢ່າງ:
$ perl -d -e 42
ໃນ Perl, debugger ບໍ່ແມ່ນໂຄງການແຍກຕ່າງຫາກທີ່ມັນມັກຈະຢູ່ໃນແບບປົກກະຕິ
ສະພາບແວດລ້ອມທີ່ລວບລວມ. ແທນທີ່ຈະ, ໄດ້ -d ທຸງບອກໃຫ້ຜູ້ລວບລວມຂໍ້ມູນໃສ່ແຫຼ່ງ
ຂໍ້ມູນກ່ຽວກັບຕົ້ນໄມ້ພາກສະມັນກໍາລັງຈະມອບໃຫ້ນາຍພາສາ. ນັ້ນຫມາຍຄວາມວ່າ
ລະຫັດຂອງທ່ານທໍາອິດຕ້ອງລວບລວມຢ່າງຖືກຕ້ອງເພື່ອໃຫ້ດີບັກເຮັດວຽກກັບມັນ. ຫຼັງຈາກນັ້ນ, ໃນເວລາທີ່
ລ່າມແປພາສາເລີ່ມຕົ້ນຂຶ້ນ, ມັນ preloads ໄຟລ໌ຫ້ອງສະຫມຸດ Perl ພິເສດທີ່ມີຕົວດີບັກ.
ໂຄງການຈະຢຸດເຊົາ ສິດ ກ່ອນທີ່ຈະ ຄໍາຖະແຫຼງທີ່ປະຕິບັດການແລ່ນເວລາທໍາອິດ (ແຕ່ເບິ່ງຂ້າງລຸ່ມນີ້
ກ່ຽວກັບ compile-time statements) ແລະຂໍໃຫ້ເຈົ້າໃສ່ຄໍາສັ່ງ debugger. ກົງກັນຂ້າມກັບ
ຄວາມຄາດຫວັງທີ່ເປັນທີ່ນິຍົມ, ທຸກຄັ້ງທີ່ debugger ຢຸດແລະສະແດງລະຫັດໃຫ້ທ່ານ, ມັນສະເຫມີ
ສະແດງເສັ້ນມັນ ກ່ຽວກັບ ເພື່ອປະຕິບັດ, ແທນທີ່ຈະເປັນອັນທີ່ມັນພຽງແຕ່ປະຕິບັດ.
ຄໍາສັ່ງໃດໆທີ່ບໍ່ໄດ້ຮັບການຮັບຮູ້ໂດຍ debugger ແມ່ນຖືກປະຕິບັດໂດຍກົງ ("eval"'d) ເປັນລະຫັດ Perl ໃນ
ຊຸດປະຈຸບັນ. (ຕົວດີບັກໃຊ້ແພັກເກັດ DB ສໍາລັບການຮັກສາສະຖານະຂອງຕົນເອງ
ຂໍ້ມູນ.)
ໃຫ້ສັງເກດວ່າ "eval" ດັ່ງກ່າວຖືກຜູກມັດໂດຍຂອບເຂດ implicit. ດັ່ງນັ້ນ, ໃດໆທີ່ນໍາສະເຫນີໃຫມ່
ຕົວແປ lexical ຫຼືເນື້ອໃນ buffer capture ທີ່ຖືກແກ້ໄຂແມ່ນສູນເສຍຫຼັງຈາກ eval. ໄດ້
debugger ແມ່ນສະພາບແວດລ້ອມທີ່ດີທີ່ຈະຮຽນຮູ້ Perl, ແຕ່ຖ້າທ່ານທົດລອງໃຊ້ໂຕ້ຕອບ
ວັດສະດຸທີ່ຄວນຈະຢູ່ໃນຂອບເຂດດຽວກັນ, stuff ມັນຢູ່ໃນເສັ້ນດຽວ.
ສໍາລັບຂໍ້ຄວາມໃດນຶ່ງທີ່ປ້ອນຢູ່ໃນການກະຕຸ້ນເຕືອນດີບັກ, ຊ່ອງຫວ່າງທີ່ນໍາໜ້າ ແລະຕໍ່ທ້າຍແມ່ນທໍາອິດ
ຖອດອອກກ່ອນການປຸງແຕ່ງຕື່ມອີກ. ຖ້າຄໍາສັ່ງ debugger coincides ກັບບາງຟັງຊັນໃນ
ໂຄງການຂອງທ່ານເອງ, ພຽງແຕ່ນໍາຫນ້າທີ່ມີບາງສິ່ງບາງຢ່າງທີ່ບໍ່ຄື
ຄໍາສັ່ງ debugger, ເຊັ່ນ: ນໍາພາ ";" ຫຼືບາງທີ "+", ຫຼືໂດຍການຫໍ່ມັນດ້ວຍ
ວົງເລັບ ຫຼືວົງເລັບ.
ການໂທ ໄດ້ Debugger
ມີຫຼາຍວິທີທີ່ຈະໂທຫາ debugger:
perl -d program_name
ໃນໂຄງການທີ່ລະບຸໂດຍ "program_name".
perl -d -e 0
ຕອບໂຕ້ສະໜອງ "ການສະແດງອອກ" ທີ່ບໍ່ມັກໃຊ້ "-e".
perl -d: ptkdb program_name
Debug ໂປຣແກຣມທີ່ໃຫ້ຜ່ານ GUI "Devel::ptkdb".
perl -dt threaded_program_name
Debug ໂປຣແກຣມທີ່ໃຫ້ໂດຍໃຊ້ກະທູ້ (ທົດລອງ).
Debugger ຄໍາສັ່ງ
ຕົວແກ້ບັນຫາແບບໂຕ້ຕອບເຂົ້າໃຈຄຳສັ່ງຕໍ່ໄປນີ້:
h ພິມຂໍ້ຄວາມຊ່ວຍເຫຼືອສະຫຼຸບ
h [ຄໍາສັ່ງ] ພິມຂໍ້ຄວາມຊ່ວຍເຫຼືອສໍາລັບຄໍາສັ່ງ debugger ທີ່ໃຫ້.
hh ການໂຕ້ຖຽງພິເສດຂອງ "hh" ຜະລິດຫນ້າຊ່ວຍເຫຼືອທັງຫມົດ, ເຊິ່ງຂ້ອນຂ້າງ
ຍາວ.
ຖ້າຜົນໄດ້ຮັບຂອງຄໍາສັ່ງ "hh" (ຫຼືຄໍາສັ່ງໃດກໍ່ຕາມ, ສໍາລັບເລື່ອງນັ້ນ) ເລື່ອນໄປ
ຜ່ານຫນ້າຈໍຂອງທ່ານ, ກ່ອນຄໍາສັ່ງທີ່ມີສັນຍາລັກທໍ່ຊັ້ນນໍາເພື່ອໃຫ້ມັນເປັນ
ແລ່ນຜ່ານ pager ຂອງທ່ານ, ຄືກັບໃນ
DB> |ຊ
ທ່ານອາດຈະປ່ຽນ pager ທີ່ຖືກນໍາໃຊ້ໂດຍຜ່ານຄໍາສັ່ງ "o pager = ... ".
p expr ຄືກັນກັບ "ພິມ {$DB::OUT} expr" ໃນຊຸດປັດຈຸບັນ. ໂດຍສະເພາະ,
ເນື່ອງຈາກວ່ານີ້ແມ່ນພຽງແຕ່ຫນ້າທີ່ "ພິມ" ຂອງ Perl ຂອງຕົນເອງ, ນີ້ຫມາຍຄວາມວ່າຂໍ້ມູນທີ່ຖືກວາງໄວ້
ໂຄງສ້າງແລະວັດຖຸບໍ່ໄດ້ຖືກຖິ້ມ, ບໍ່ຄືກັບຄໍາສັ່ງ "x".
"DB::OUT" filehandle ຖືກເປີດໃຫ້ /dev/ttyໂດຍບໍ່ຄໍານຶງເຖິງບ່ອນທີ່ STDOUT ອາດຈະ
ຖືກໂອນໄປຫາ.
x [maxdepth] expr
ການປະເມີນການສະແດງອອກຂອງຕົນໃນບັນຊີລາຍການແລະ dumps ອອກຜົນໄດ້ຮັບໃນ pretty-
ແຟຊັ່ນພິມ. ໂຄງສ້າງຂໍ້ມູນ Nested ແມ່ນພິມອອກ recursively, ບໍ່ເຫມືອນກັບ
ຫນ້າທີ່ "ພິມ" ທີ່ແທ້ຈິງໃນ Perl. ເມື່ອຖິ້ມ hashes, ເຈົ້າອາດຈະ
ມັກ 'x \%h' ແທນທີ່ 'x %h'. ເບິ່ງ Dumpvalue ຖ້າທ່ານຕ້ອງການເຮັດສິ່ງນີ້
ຕົວທ່ານເອງ.
ຮູບແບບຜົນຜະລິດແມ່ນຄວບຄຸມໂດຍທາງເລືອກທີ່ຫຼາກຫຼາຍອະທິບາຍພາຍໃຕ້ການ
"ຕົວເລືອກທີ່ສາມາດຕັ້ງຄ່າໄດ້".
ຖ້າ "maxdepth" ຖືກລວມ, ມັນຕ້ອງເປັນຕົວເລກ N; ມູນຄ່າຖືກຖິ້ມ
ພຽງແຕ່ N ລະດັບເລິກ, ຄືກັບວ່າທາງເລືອກ "dumpDepth" ໄດ້ຖືກຕັ້ງໄວ້ຊົ່ວຄາວ
N.
V [pkg [vars]]
ສະແດງຕົວແປທັງໝົດ (ຫຼືບາງອັນ) ໃນແພັກເກັດ (ຄ່າເລີ່ມຕົ້ນເປັນ "ຫຼັກ") ໂດຍໃຊ້ຂໍ້ມູນ
pretty-printer (hashes ສະແດງໃຫ້ເຫັນກະແຈແລະຄຸນຄ່າຂອງເຂົາເຈົ້າເພື່ອໃຫ້ທ່ານເບິ່ງວ່າແມ່ນຫຍັງ,
ຕົວອັກສອນການຄວບຄຸມແມ່ນເຮັດໃຫ້ພິມໄດ້, ແລະອື່ນໆ). ໃຫ້ແນ່ໃຈວ່າທ່ານບໍ່ໄດ້ໃສ່
ພິມຕົວລະບຸ (ເຊັ່ນ "$") ຢູ່ທີ່ນັ້ນ, ພຽງແຕ່ຊື່ສັນຍາລັກ, ເຊັ່ນນີ້:
ແຖວຊື່ໄຟລ໌ V DB
ໃຊ້ "~pattern" ແລະ "!pattern" ສໍາລັບ regexes ບວກແລະລົບ.
ນີ້ແມ່ນຄ້າຍຄືກັນກັບການເອີ້ນຄໍາສັ່ງ "x" ໃນແຕ່ລະ var ທີ່ໃຊ້ໄດ້.
X [vars] ຄືກັນກັບ "V currentpackage [vars]".
y [ລະດັບ [vars]]
ສະແດງຕົວແປ lexical ທັງໝົດ (ຫຼືບາງອັນ) (mnemonic: "mY" variables) ໃນ
ຂອບເຂດປະຈຸບັນຫຼື ລະດັບ ຂອບເຂດສູງກວ່າ. ທ່ານສາມາດຈໍາກັດຕົວແປທີ່ທ່ານ
ເບິ່ງດ້ວຍ vars ເຊິ່ງເຮັດວຽກແທ້ຄືກັບຄໍາສັ່ງ "V" ແລະ "X".
ຕ້ອງການໂມດູນ "PadWalker" ຮຸ່ນ 0.08 ຫຼືສູງກວ່າ; ຈະເຕືອນຖ້າຫາກວ່ານີ້
ບໍ່ໄດ້ຕິດຕັ້ງ. ຜົນຜະລິດແມ່ນ pretty-printed ໃນຮູບແບບດຽວກັນກັບ "V" ແລະ
ຮູບແບບແມ່ນຖືກຄວບຄຸມໂດຍທາງເລືອກດຽວກັນ.
T ຜະລິດ stack backtrace. ເບິ່ງຂ້າງລຸ່ມນີ້ສໍາລັບລາຍລະອຽດກ່ຽວກັບຜົນຜະລິດຂອງມັນ.
s [expr] ຂັ້ນຕອນດຽວ. ປະຕິບັດຈົນກ່ວາການເລີ່ມຕົ້ນຂອງຄໍາຖະແຫຼງການອື່ນ, descending
ເຂົ້າໄປໃນການໂທແບບປົກກະຕິ. ຖ້າຫາກວ່າການສະແດງໃຫ້ເຫັນທີ່ປະກອບມີການທໍາງານ
ໂທ, ມັນຄືກັນຈະເປັນຂັ້ນຕອນດຽວ.
n [expr] ຕໍ່ໄປ. ດໍາເນີນການຜ່ານການໂທແບບປົກກະຕິຍ່ອຍ, ຈົນກ່ວາການເລີ່ມຕົ້ນຂອງຕໍ່ໄປ
ຖະແຫຼງການ. ຖ້າການສະແດງອອກແມ່ນສະຫນອງໃຫ້ເຊິ່ງລວມມີການເອີ້ນຟັງຊັນ, ເຫຼົ່ານັ້ນ
ຟັງຊັນຕ່າງໆຈະຖືກປະຕິບັດດ້ວຍການຢຸດກ່ອນແຕ່ລະຄໍາຖະແຫຼງການ.
r ສືບຕໍ່ຈົນກ່ວາຜົນຕອບແທນຈາກ subroutine ໃນປັດຈຸບັນ. ຖິ້ມຄ່າກັບຄືນ
ຖ້າຕົວເລືອກ "PrintRet" ຖືກຕັ້ງ (ຄ່າເລີ່ມຕົ້ນ).
ເຮັດຊ້ໍາຄໍາສັ່ງ "n" ຫຼື "s" ສຸດທ້າຍ.
c [ເສັ້ນ|ຍ່ອຍ]
ສືບຕໍ່, ເປັນທາງເລືອກທີ່ຈະໃສ່ຈຸດແບ່ງຈຸດແບບເທື່ອດຽວຕາມທີ່ລະບຸໄວ້
ເສັ້ນຫຼື subroutine.
l ລາຍຊື່ປ່ອງຢ້ຽມຕໍ່ໄປຂອງສາຍ.
l min+incr ລາຍຊື່ "incr+1" ແຖວເລີ່ມຕົ້ນທີ່ "min".
l min-max ບັນຊີລາຍຊື່ເສັ້ນ "min" ຜ່ານ "max". "l -" ແມ່ນຄໍາສັບຄ້າຍຄື "-".
l ບັນຊີລາຍຊື່ເສັ້ນດຽວ.
l subname ລາຍຊື່ປ່ອງຢ້ຽມທໍາອິດຂອງສາຍຈາກ subroutine. ຊື່ຍ່ອຍ ອາດຈະເປັນຕົວແປທີ່
ມີລະຫັດອ້າງອີງ.
- ລາຍຊື່ປ່ອງຢ້ຽມຜ່ານມາຂອງສາຍ.
v [line] ເບິ່ງສອງສາມເສັ້ນຂອງລະຫັດປະມານເສັ້ນປະຈຸບັນ.
. ກັບຄືນຕົວຊີ້ຕົວຊີ້ດີບັກພາຍໃນໄປຫາແຖວທີ່ປະຕິບັດຄັ້ງສຸດທ້າຍ, ແລະພິມອອກ
ເສັ້ນນັ້ນ.
f ຊື່ໄຟລ໌ປ່ຽນໄປເບິ່ງໄຟລ໌ອື່ນ ຫຼືຄໍາຖະແຫຼງ "eval". ຖ້າ ຊື່ເອກະສານ ບໍ່ແມ່ນ
ຊື່ເສັ້ນທາງເຕັມທີ່ພົບເຫັນຢູ່ໃນຄ່າຂອງ %INC, ມັນຖືວ່າເປັນ regex.
"eval"ed strings (ເມື່ອສາມາດເຂົ້າເຖິງໄດ້) ຖືກຖືວ່າເປັນຊື່ໄຟລ໌: "f (eval
7)" ແລະ "f eval 7\b" ເຂົ້າເຖິງເນື້ອໃນຂອງ 7th "eval" ed string (ຕາມລໍາດັບ.
ຂອງການປະຕິບັດ). ອົງການຈັດຕັ້ງຂອງ "eval" ທີ່ຖືກປະຕິບັດໃນປັດຈຸບັນແລະ "eval"ed
ສະຕຣິງທີ່ກໍານົດ subroutines ຖືກບັນທຶກໄວ້ແລະດັ່ງນັ້ນຈຶ່ງສາມາດເຂົ້າເຖິງໄດ້.
/pattern/ ຄົ້ນຫາຕໍ່ໄປສໍາລັບຮູບແບບ (a Perl regex); ສຸດທ້າຍ / ເປັນທາງເລືອກ. ການຄົ້ນຫາ
ແມ່ນຕົວພິມນ້ອຍໃຫຍ່ໂດຍຄ່າເລີ່ມຕົ້ນ.
?ແບບ? ຄົ້ນຫາກັບຄືນໄປບ່ອນສໍາລັບຮູບແບບ; ສຸດທ້າຍ? ເປັນທາງເລືອກ. ການຄົ້ນຫາແມ່ນກໍລະນີ -
insensitive ໂດຍຄ່າເລີ່ມຕົ້ນ.
L [abw] ລາຍການ (ຄ່າເລີ່ມຕົ້ນທັງໝົດ) ການກະທຳ, ຈຸດຢຸດ ແລະ ການສະແດງອອກ
S [[!]regex]
ບອກຊື່ຍ່ອຍຍ່ອຍ [ບໍ່] ກົງກັບ regex.
t [n] ສະຫຼັບໂໝດການຕິດຕາມ (ເບິ່ງຕົວເລືອກ "AutoTrace"). ການໂຕ້ຖຽງທາງເລືອກແມ່ນ
ຈໍານວນສູງສຸດຂອງລະດັບການຕິດຕາມຂ້າງລຸ່ມນີ້ຫນຶ່ງໃນປັດຈຸບັນ; ສິ່ງໃດເລິກກວ່າ
ນັ້ນຈະງຽບ.
t [n] expr ຕິດຕາມໂດຍຜ່ານການປະຕິບັດ "expr". ການໂຕ້ຖຽງທໍາອິດທາງເລືອກແມ່ນສູງສຸດ
ຈໍານວນຂອງລະດັບການຕິດຕາມຂ້າງລຸ່ມນີ້ຫນຶ່ງໃນປະຈຸບັນ; ສິ່ງໃດເລິກກວ່ານັ້ນ
ຈະມິດງຽບ. ເບິ່ງ "ຕົວຢ່າງຜົນຜະລິດລາຍຊື່ກອບ" ໃນ perldebguts ສໍາລັບ
ຕົວຢ່າງ.
b ກໍານົດຈຸດຢຸດຢູ່ໃນເສັ້ນປະຈຸບັນ
b [ເສັ້ນ] [ເງື່ອນໄຂ]
ຕັ້ງຈຸດຢຸດກ່ອນເສັ້ນທີ່ໃຫ້. ຖ້າເງື່ອນໄຂຖືກລະບຸ, ມັນແມ່ນ
ການປະເມີນແຕ່ລະຄັ້ງທີ່ຖະແຫຼງການບັນລຸໄດ້: ຈຸດຢຸດແມ່ນປະຕິບັດພຽງແຕ່ຖ້າ
ເງື່ອນໄຂແມ່ນຄວາມຈິງ. ຈຸດຢຸດອາດຈະຖືກຕັ້ງຢູ່ໃນເສັ້ນທີ່ເລີ່ມຕົ້ນ a
ຄໍາຖະແຫຼງທີ່ປະຕິບັດໄດ້. ເງື່ອນໄຂບໍ່ໄດ້ໃຊ້ "ຖ້າ":
b 237 $x > 30
b 237 ++$count237 < 11
b 33 /pattern/i
ຖ້າຫມາຍເລກແຖວແມ່ນ ".", ກໍານົດຈຸດຢຸດຢູ່ໃນເສັ້ນປະຈຸບັນ:
ຂ . $n > 100
b [ໄຟລ໌]:[line] [ເງື່ອນໄຂ]
ຕັ້ງຈຸດຢຸດກ່ອນເສັ້ນທີ່ໃຫ້ໄວ້ໃນໄຟລ໌ (ອາດຈະແຕກຕ່າງກັນ). ຖ້າ ກ
ເງື່ອນໄຂຖືກລະບຸ, ມັນຖືກປະເມີນແຕ່ລະຄັ້ງທີ່ຖະແຫຼງການບັນລຸໄດ້: a
ຈຸດຢຸດແມ່ນປະຕິບັດພຽງແຕ່ຖ້າເງື່ອນໄຂເປັນຄວາມຈິງ. ຈຸດພັກຜ່ອນອາດຈະເປັນພຽງແຕ່
ຕັ້ງຢູ່ໃນເສັ້ນທີ່ເລີ່ມຕົ້ນຄໍາຖະແຫຼງທີ່ປະຕິບັດໄດ້. ເງື່ອນໄຂບໍ່ໄດ້ໃຊ້ "ຖ້າ":
b lib/MyModule.pm:237 $x > 30
b /usr/lib/perl5/site_perl/CGI.pm:100 ++$count100 < 11
b ຊື່ຍ່ອຍ [ເງື່ອນໄຂ]
ຕັ້ງຈຸດຢຸດກ່ອນແຖວທຳອິດຂອງລາຍການຍ່ອຍທີ່ມີຊື່. ຊື່ຍ່ອຍ ອາດຈະ
ເປັນຕົວແປທີ່ມີການອ້າງອີງລະຫັດ (ໃນກໍລະນີນີ້ ສະພາບ ບໍ່ແມ່ນ
ສະຫນັບສະຫນູນ).
b ເລື່ອນຊື່ຍ່ອຍ [ເງື່ອນໄຂ]
ຕັ້ງຈຸດຢຸດຢູ່ແຖວທຳອິດຂອງລາຍການຍ່ອຍຫຼັງຈາກມັນຖືກລວບລວມແລ້ວ.
b ໂຫຼດຊື່ໄຟລ໌
ກໍານົດຈຸດຢຸດກ່ອນເສັ້ນປະຕິບັດທໍາອິດຂອງ ຊື່ເອກະສານ, ເຊິ່ງຄວນ
ເປັນຊື່ເສັ້ນທາງເຕັມທີ່ພົບໃນ %INC ຄ່າ.
b ລວບລວມຊື່ຍ່ອຍ
ກໍານົດ breakpoint ກ່ອນຄໍາຖະແຫຼງທີ່ທໍາອິດປະຕິບັດຫຼັງຈາກທີ່ກໍານົດໄວ້
subroutine ແມ່ນລວບລວມ.
B line ລົບຈຸດຢຸດຈາກທີ່ລະບຸໄວ້ ອອນໄລນ໌.
B * ລຶບຈຸດຢຸດທີ່ຕິດຕັ້ງທັງໝົດ.
ປິດການໃຊ້ງານ [ໄຟລ໌]:[line]
ປິດການໃຊ້ງານ breakpoint ເພື່ອບໍ່ໃຫ້ມັນຢຸດການດໍາເນີນໂຄງການ.
Breakpoints ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນແລະສາມາດຖືກເປີດໃຊ້ໃຫມ່ໂດຍໃຊ້ "enable"
ຄໍາສັ່ງ.
ປິດການໃຊ້ງານ [line]
ປິດການໃຊ້ງານ breakpoint ເພື່ອບໍ່ໃຫ້ມັນຢຸດການດໍາເນີນໂຄງການ.
Breakpoints ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນແລະສາມາດຖືກເປີດໃຊ້ໃຫມ່ໂດຍໃຊ້ "enable"
ຄໍາສັ່ງ.
ນີ້ແມ່ນເຮັດສໍາລັບ breakpoint ໃນໄຟລ໌ປະຈຸບັນ.
ເປີດໃຊ້ [file]:[line]
ເປີດໃຊ້ຈຸດຢຸດສະນັ້ນມັນຈະຢຸດການປະຕິບັດໂຄງການ.
ເປີດໃຊ້ [line]
ເປີດໃຊ້ຈຸດຢຸດສະນັ້ນມັນຈະຢຸດການປະຕິບັດໂຄງການ.
ນີ້ແມ່ນເຮັດສໍາລັບ breakpoint ໃນໄຟລ໌ປະຈຸບັນ.
ຄໍາສັ່ງ [ເສັ້ນ]
ກໍານົດການປະຕິບັດທີ່ຕ້ອງເຮັດກ່ອນທີ່ເສັ້ນຈະຖືກປະຕິບັດ. ຖ້າ ອອນໄລນ໌ ຖືກລະເວັ້ນ, ຕັ້ງ
ການກະ ທຳ ຢູ່ໃນເສັ້ນທີ່ຈະຖືກປະຕິບັດ. ລໍາດັບຂອງຂັ້ນຕອນການປະຕິບັດໂດຍ
debugger ແມ່ນ
1. ກວດເບິ່ງຈຸດຢຸດຢູ່ແຖວນີ້
2. ພິມເສັ້ນຖ້າຈໍາເປັນ (ຕິດຕາມ)
3. ດໍາເນີນການໃດໆທີ່ກ່ຽວຂ້ອງກັບເສັ້ນນັ້ນ
4. ເຕືອນຜູ້ໃຊ້ຖ້າຢູ່ໃນຈຸດຢຸດຫຼືໃນຂັ້ນຕອນດຽວ
5. ເສັ້ນປະເມີນຜົນ
ຕົວຢ່າງ, ນີ້ຈະພິມອອກ $foo ທຸກໆຄັ້ງທີ່ເສັ້ນ 53 ຖືກຜ່ານ:
a 53 ພິມ "DB ພົບ $foo\n"
ແຖວລຶບການກະທຳໃດໜຶ່ງອອກຈາກແຖວທີ່ກຳນົດໄວ້.
A * ລຶບການດໍາເນີນການທີ່ຕິດຕັ້ງທັງຫມົດ.
w expr ເພີ່ມການສະແດງອອກທົ່ວໂລກ. ທຸກຄັ້ງທີ່ຄົນເບິ່ງທົ່ວໂລກຈະປ່ຽນຕົວດີບັກ
ຈະຢຸດແລະສະແດງຄ່າເກົ່າແລະໃຫມ່.
W expr ລົບ watch-expression
W * ລຶບການສະແດງອອກໂມງທັງໝົດ.
o ສະແດງຕົວເລືອກທັງໝົດ.
o booloption ...
ຕັ້ງແຕ່ລະຕົວເລືອກ Boolean ທີ່ມີລາຍຊື່ເປັນຄ່າ 1.
o ທາງເລືອກ? ...
ພິມອອກມູນຄ່າຂອງຫນຶ່ງຫຼືຫຼາຍທາງເລືອກ.
o option=value...
ກໍານົດຄ່າຂອງຫນຶ່ງຫຼືຫຼາຍທາງເລືອກ. ຖ້າຄ່າມີຊ່ອງຫວ່າງພາຍໃນ,
ມັນຄວນຈະຖືກອ້າງເຖິງ. ຕົວຢ່າງ, ທ່ານສາມາດຕັ້ງ "o pager="less -MQeicsNfr"
ໂທຫາ ຫນ້ອຍ ດ້ວຍທາງເລືອກສະເພາະເຫຼົ່ານັ້ນ. ເຈົ້າອາດຈະໃຊ້ແບບດຽວ ຫຼືຄູ່
ຄໍາເວົ້າ, ແຕ່ຖ້າທ່ານເຮັດ, ທ່ານຕ້ອງຫນີຈາກກໍລະນີທີ່ຝັງຢູ່ໃນປະເພດດຽວກັນ
quote ທ່ານໄດ້ເລີ່ມຕົ້ນດ້ວຍ, ເຊັ່ນດຽວກັນກັບການຫລົບຫນີໃດໆທີ່ຫນີທັນທີ
ລ່ວງໜ້າຄຳສະເໜີນັ້ນ ແຕ່ອັນນັ້ນບໍ່ໄດ້ໝາຍເຖິງການຫລົບໜີການອ້າງອີງນັ້ນເອງ. ໃນ
ຄໍາ ສັບ ຕ່າງໆ ອື່ນໆ, ທ່ານ ປະ ຕິ ບັດ ຕາມ ກົດ ລະ ບຽບ ການ ວົງ ຢືມ ດຽວ ໂດຍ ບໍ່ ສົນ ເລື່ອງ ຂອງ quote ໄດ້; ຕົວຢ່າງ: "o
option='ນີ້ບໍ່ແມ່ນບໍ່ດີ'" ຫຼື "o option="ນາງເວົ້າວ່າ, \"ບໍ່ແມ່ນບໍ?\""".
ສໍາລັບເຫດຜົນທາງປະຫວັດສາດ, "=value" ແມ່ນທາງເລືອກ, ແຕ່ຄ່າເລີ່ມຕົ້ນແມ່ນ 1 ເທົ່ານັ້ນ
ມັນປອດໄພທີ່ຈະເຮັດແນວນັ້ນ - ນັ້ນແມ່ນ, ສ່ວນຫຼາຍແມ່ນສໍາລັບທາງເລືອກ Boolean. ມັນດີກວ່າສະເໝີ
ເພື່ອກໍານົດຄ່າສະເພາະໂດຍໃຊ້ "=". "ທາງເລືອກ" ສາມາດຫຍໍ້, ແຕ່
ສໍາລັບຄວາມຊັດເຈນອາດຈະບໍ່ຄວນຈະເປັນ. ທາງເລືອກຫຼາຍສາມາດໄດ້ຮັບການກໍານົດຮ່ວມກັນ. ເບິ່ງ
"ຕົວເລືອກທີ່ສາມາດຕັ້ງຄ່າໄດ້" ສໍາລັບບັນຊີລາຍຊື່ເຫຼົ່ານີ້.
< ? ບອກການກະທໍາຄໍາສັ່ງ Perl ລ່ວງໜ້າທັງໝົດ.
< [ຄໍາສັ່ງ]
ກໍານົດການດໍາເນີນການ (ຄໍາສັ່ງ Perl) ທີ່ຈະເກີດຂຶ້ນກ່ອນທີ່ຈະທຸກການກະຕຸ້ນເຕືອນດີບັກ. ຫຼາຍ
ຄໍາສັ່ງເສັ້ນອາດຈະຖືກໃສ່ໂດຍການ backslashing ແຖວໃຫມ່.
< * ລົບທຸກການກະທໍາຄໍາສັ່ງ Perl pre-prompt.
<< ຄໍາສັ່ງເພີ່ມການດໍາເນີນການ (ຄໍາສັ່ງ Perl) ທີ່ຈະເກີດຂຶ້ນກ່ອນທີ່ຈະທຸກ debugger prompt. ຫຼາຍ
ຄໍາສັ່ງເສັ້ນອາດຈະຖືກປ້ອນໂດຍການ backwhacking the newlines.
> ? ບອກຄຳສັ່ງ Perl post-prompt.
> ຄໍາສັ່ງກໍານົດການປະຕິບັດ (ຄໍາສັ່ງ Perl) ທີ່ຈະເກີດຂຶ້ນຫຼັງຈາກ prompt ໃນເວລາທີ່ທ່ານໄດ້ໃຫ້
ຄໍາສັ່ງທີ່ຈະກັບຄືນໄປຫາການປະຕິບັດ script. ຄໍາສັ່ງຫຼາຍແຖວອາດຈະເປັນ
ເຂົ້າໄປໂດຍການ backslashing ແຖວໃຫມ່ (ພວກເຮົາເດີມພັນທີ່ທ່ານບໍ່ສາມາດຄາດເດົາໄດ້
ດຽວນີ້).
> * ລົບການປະຕິບັດຄໍາສັ່ງ Perl ຕອບ prompt ທັງຫມົດ.
>> ຄໍາສັ່ງເພີ່ມການປະຕິບັດ (ຄໍາສັ່ງ Perl) ທີ່ຈະເກີດຂຶ້ນຫຼັງຈາກ prompt ໃນເວລາທີ່ທ່ານໄດ້ພຽງແຕ່
ໄດ້ຮັບຄໍາສັ່ງເພື່ອກັບຄືນໄປຫາການປະຕິບັດ script. ຄໍາສັ່ງຫຼາຍແຖວອາດຈະ
ເຂົ້າໄປໂດຍການ backslashing ແຖວໃໝ່.
{ ? ບອກຄໍາສັ່ງ debugger ລ່ວງໜ້າ.
{ [ຄໍາສັ່ງ]
ກໍານົດການດໍາເນີນການ (ຄໍາສັ່ງ debugger) ທີ່ຈະເກີດຂຶ້ນກ່ອນທີ່ຈະທຸກ debugger prompt. ກ
ຄໍາສັ່ງຫຼາຍແຖວອາດຈະຖືກໃສ່ໃນແບບປະເພນີ.
ເນື່ອງຈາກວ່າຄໍາສັ່ງນີ້ແມ່ນຢູ່ໃນຄວາມຮູ້ສຶກໃຫມ່, ການເຕືອນໄພຈະຖືກອອກຖ້າທ່ານປາກົດ
ໄດ້ເຂົ້າໄປໃນບລັອກໂດຍບັງເອີນແທນ. ຖ້ານັ້ນແມ່ນສິ່ງທີ່ທ່ານຫມາຍຄວາມວ່າຈະເຮັດ,
ຂຽນມັນຄືກັບ ";{ ... }" ຫຼືແມ້ກະທັ້ງ "ເຮັດ { ... }".
{ * ລຶບຄໍາສັ່ງດີບັ໊ກກ່ອນການເຕືອນທັງໝົດ.
{{ ຄໍາສັ່ງເພີ່ມການກະທໍາ (ຄໍາສັ່ງ debugger) ທີ່ຈະເກີດຂຶ້ນກ່ອນທີ່ຈະແຈ້ງການ debugger ທຸກ. ກ
ຄໍາສັ່ງຫຼາຍແຖວອາດຈະຖືກໃສ່, ຖ້າເຈົ້າສາມາດເດົາໄດ້ແນວໃດ: ເບິ່ງຂ້າງເທິງ.
! ຈໍານວນເຮັດຄືນຄໍາສັ່ງທີ່ຜ່ານມາ (ຄ່າເລີ່ມຕົ້ນຂອງຄໍາສັ່ງທີ່ຜ່ານມາ).
! -number Redo number'th ຄໍາສັ່ງທີ່ຜ່ານມາ.
! pattern Redo ຄໍາສັ່ງສຸດທ້າຍທີ່ເລີ່ມຕົ້ນດ້ວຍຮູບແບບ. ເບິ່ງ "o recallCommand", ເຊັ່ນກັນ.
!! cmd ແລ່ນ cmd ໃນຂະບວນການຍ່ອຍ (ອ່ານຈາກ DB::IN, ຂຽນໄປທີ່ DB::OUT) ເບິ່ງ "o
shellBang", ຍັງ. ໃຫ້ສັງເກດວ່າ shell ປະຈຸບັນຂອງຜູ້ໃຊ້ (ດີ, $ENV{SHELL} ຂອງເຂົາເຈົ້າ.
variable) ຈະຖືກນໍາໃຊ້, ເຊິ່ງສາມາດແຊກແຊງການຕີຄວາມເຫມາະສົມຂອງການອອກ
ສະຖານະພາບຫຼືສັນຍານແລະຂໍ້ມູນ coredump.
source file ອ່ານແລະປະຕິບັດຄໍາສັ່ງ debugger ຈາກ ເອກະສານ. ເອກະສານ ຕົວຂອງມັນເອງອາດຈະປະກອບດ້ວຍ
ຄໍາສັ່ງ "ແຫຼ່ງ".
H -number ສະແດງຄໍາສັ່ງ n ສຸດທ້າຍ. ມີພຽງແຕ່ຄໍາສັ່ງທີ່ຍາວກວ່າຫນຶ່ງຕົວອັກສອນເທົ່ານັ້ນທີ່ມີລາຍຊື່.
If ຈໍານວນ ຖືກລະເວັ້ນ, ບອກພວກເຂົາທັງຫມົດ.
q ຫຼື ^D ອອກ. ("ເຊົາ" ບໍ່ໄດ້ຜົນສໍາລັບການນີ້, ເວັ້ນເສຍແຕ່ວ່າທ່ານໄດ້ເຮັດນາມແຝງ) ນີ້ແມ່ນ
ພຽງແຕ່ສະຫນັບສະຫນູນວິທີການອອກຈາກ debugger ໄດ້, ເຖິງແມ່ນວ່າການພິມ "ອອກ" ສອງຄັ້ງອາດຈະ
ເຮັດວຽກ.
ຕັ້ງຕົວເລືອກ "inhibit_exit" ເປັນ 0 ຖ້າທ່ານຕ້ອງການທີ່ຈະສາມາດກ້າວອອກຈາກຈຸດສຸດທ້າຍ
ສະຄຣິບ. ທ່ານອາດຈະຕ້ອງຕັ້ງ $finished ເປັນ 0 ຖ້າທ່ານຕ້ອງການກ້າວ
ໂດຍຜ່ານການທໍາລາຍໂລກ.
R ຣີສະຕາດເຄື່ອງດີບັກໂດຍ "exec()"ໃນເຊດຊັນໃໝ່. ພວກເຮົາພະຍາຍາມຮັກສາຂອງທ່ານ
ປະຫວັດສາດໃນທົ່ວອັນນີ້, ແຕ່ການຕັ້ງຄ່າພາຍໃນແລະທາງເລືອກແຖວຄໍາສັ່ງອາດຈະເປັນ
ສູນເສຍ.
ການຕັ້ງຄ່າດັ່ງຕໍ່ໄປນີ້ແມ່ນໄດ້ຮັບການຮັກສາໄວ້: ປະຫວັດສາດ, ຈຸດຢຸດ, ການປະຕິບັດ,
ຕົວເລືອກ debugger, ແລະຕົວເລືອກແຖວຄໍາສັ່ງ Perl -w, -I, ແລະ -e.
|dbcmd ດໍາເນີນການຄໍາສັ່ງ debugger, piping DB::OUT ເຂົ້າໄປໃນ pager ໃນປັດຈຸບັນຂອງທ່ານ.
||dbcmd ຄືກັນກັບ "|dbcmd" ແຕ່ DB::OUT ແມ່ນຊົ່ວຄາວ "ເລືອກ"ed ເຊັ່ນກັນ.
= [ມູນຄ່ານາມແຝງ]
ກໍານົດນາມແຝງຄໍາສັ່ງ, ເຊັ່ນ
= ເຊົາ q
ຫຼືລາຍຊື່ນາມແຝງໃນປະຈຸບັນ.
command ປະຕິບັດຄໍາສັ່ງເປັນຄໍາຖະແຫຼງ Perl. ເຄື່ອງໝາຍຈຸດຕໍ່ທ້າຍຈະຖືກສະໜອງໃຫ້.
ຖ້າຄໍາຖະແຫຼງ Perl ອາດຈະສັບສົນສໍາລັບ Perl debugger, ໃຊ້ a
ຖັນຊັ້ນນໍາ, ເຊັ່ນດຽວກັນ.
m expr ລາຍຊື່ວິທີການທີ່ອາດຈະຖືກເອີ້ນໃນຜົນໄດ້ຮັບຂອງການສະແດງອອກທີ່ຖືກປະເມີນ.
ການສະແດງອອກອາດຈະປະເມີນເຖິງການອ້າງອີງເຖິງວັດຖຸທີ່ໄດ້ຮັບພອນ, ຫຼືເຖິງ ກ
ຊື່ແພັກເກດ.
M ສະແດງໂມດູນທີ່ໂຫລດທັງຫມົດແລະຮຸ່ນຂອງພວກເຂົາ.
ຜູ້ຊາຍ [manpage]
ເຖິງວ່າຈະມີຊື່ຂອງມັນ, ນີ້ເອີ້ນຕົວເບິ່ງເອກະສານເລີ່ມຕົ້ນຂອງລະບົບຂອງເຈົ້າຢູ່ໃນ
ຫນ້າທີ່ໃຫ້, ຫຼືໃນ viewer ຕົວຂອງມັນເອງຖ້າຫາກວ່າ manpage ຖືກລະເວັ້ນ. ຖ້າຜູ້ຊົມນັ້ນແມ່ນ
ຜູ້ຊາຍ, ຂໍ້ມູນ "Config" ປະຈຸບັນຖືກນໍາໃຊ້ເພື່ອຮຽກຮ້ອງ ຜູ້ຊາຍ ການນໍາໃຊ້ທີ່ເຫມາະສົມ
MANPATH ຫຼື -M ທາງຍ່າງ ທາງເລືອກ. ລົ້ມເຫລວໃນການຊອກຫາແບບຟອມ "XXX" ທີ່ກົງກັນ
manpages ທີ່ຮູ້ຈັກຂອງແບບຟອມ perlXXX ຈະຖືກລອງໃໝ່. ນີ້ຊ່ວຍໃຫ້ທ່ານພິມ "ຜູ້ຊາຍ
debug" ຫຼື "man op" ຈາກດີບັກ.
ໃນລະບົບແບບດັ້ງເດີມຈະບໍ່ມີສິ່ງທີ່ສາມາດໃຊ້ໄດ້ ຜູ້ຊາຍ ຄໍາສັ່ງ, debugger ຮຽກຮ້ອງ
perldoc. ບາງຄັ້ງການກໍານົດນີ້ບໍ່ຖືກຕ້ອງເນື່ອງຈາກ recalcitrant
ຜູ້ຂາຍຫຼືຫຼາຍກວ່າ felicitously, ກັບຜູ້ໃຊ້ວິສາຫະກິດ. ຖ້າທ່ານຕົກຢູ່ໃນ
ປະເພດໃດນຶ່ງ, ພຽງແຕ່ຕັ້ງຕົວແປ $DB::doccmd ດ້ວຍຕົນເອງໃຫ້ກັບຕົວເບິ່ງອັນໃດກໍໄດ້
ເພື່ອເບິ່ງເອກະສານ Perl ໃນລະບົບຂອງທ່ານ. ອັນນີ້ອາດຈະຖືກຕັ້ງຢູ່ໃນໄຟລ໌ rc,
ຫຼືຜ່ານການມອບໝາຍໂດຍກົງ. ພວກເຮົາຍັງລໍຖ້າຕົວຢ່າງການເຮັດວຽກຂອງ
ບາງສິ່ງບາງຢ່າງຕາມເສັ້ນຂອງ:
$DB::doccmd = 'netscape -remote http://something.here/';
ສາມາດຕັ້ງຄ່າໄດ້ ທາງເລືອກໃນການ
debugger ມີຕົວເລືອກຈໍານວນຫລາຍທີ່ສາມາດຕັ້ງຄ່າໄດ້ໂດຍໃຊ້ຄໍາສັ່ງ "o", ບໍ່ວ່າຈະໂຕ້ຕອບຫຼື
ຈາກສະພາບແວດລ້ອມຫຼືໄຟລ໌ rc. (./.perldb ຫຼື ~/.perldb ພາຍໃຕ້ Unix.)
"recallCommand", "ShellBang"
ຕົວອັກສອນທີ່ໃຊ້ໃນການຈື່ຈໍາຄໍາສັ່ງຫຼືສ້າງຫອຍ. ໂດຍຄ່າເລີ່ມຕົ້ນ, ທັງສອງ
ຖືກຕັ້ງເປັນ "!", ເຊິ່ງເປັນໂຊກບໍ່ດີ.
"pager" ໂປລແກລມທີ່ຈະໃຊ້ສໍາລັບການອອກຄໍາສັ່ງ pager-piped (ຜູ້ທີ່ເລີ່ມຕົ້ນດ້ວຍ "|"
ຕົວອັກສອນ.) ໂດຍຄ່າເລີ່ມຕົ້ນ, $ENV{PAGER} ຈະຖືກໃຊ້. ເນື່ອງຈາກວ່າ debugger ໃຊ້
ຄຸນລັກສະນະຢູ່ປາຍຍອດໃນປະຈຸບັນຂອງທ່ານສໍາລັບການກ້າຫານແລະການ underlining, ຖ້າຫາກວ່າເລືອກ
pager ບໍ່ຜ່ານລໍາດັບ escape ໂດຍຜ່ານການບໍ່ປ່ຽນແປງ, ຜົນຜະລິດຂອງບາງ
ຄໍາສັ່ງ debugger ຈະບໍ່ສາມາດອ່ານໄດ້ເມື່ອສົ່ງຜ່ານ pager.
"tkRunning" ແລ່ນ Tk ໃນຂະນະທີ່ກະຕຸ້ນເຕືອນ (ດ້ວຍ ReadLine).
"ລະດັບສັນຍານ", "warnLevel", "dieLevel"
ລະດັບຂອງ verbosity. ໂດຍຄ່າເລີ່ມຕົ້ນ, debugger ອອກຈາກຂໍ້ຍົກເວັ້ນຂອງທ່ານແລະ
ການເຕືອນໄພຢ່າງດຽວ, ເພາະວ່າການປ່ຽນແປງພວກມັນສາມາດທໍາລາຍໂຄງການທີ່ເຮັດວຽກຢ່າງຖືກຕ້ອງ.
ມັນຈະພະຍາຍາມພິມຂໍ້ຄວາມເມື່ອສັນຍານ INT, BUS, ຫຼື SEGV ບໍ່ຕິດ
ມາຮອດ. (ແຕ່ເບິ່ງການກ່າວເຖິງສັນຍານໃນ "BUGS" ຂ້າງລຸ່ມນີ້.)
ເພື່ອປິດການນຳໃຊ້ໂໝດປອດໄພເລີ່ມຕົ້ນນີ້, ໃຫ້ຕັ້ງຄ່າເຫຼົ່ານີ້ເປັນບາງອັນທີ່ສູງກວ່າ
0. ໃນລະດັບ 1, ທ່ານຈະໄດ້ຮັບ backtrace ຕາມທີ່ໄດ້ຮັບການເຕືອນໄພໃດໆ
(ນີ້ມັກຈະເປັນທີ່ຫນ້າລໍາຄານ) ຫຼືຂໍ້ຍົກເວັ້ນ (ນີ້ມັກຈະມີຄຸນຄ່າ).
ແຕ່ຫນ້າເສຍດາຍ, debugger ບໍ່ສາມາດສັງເກດເຫັນຂໍ້ຍົກເວັ້ນທີ່ເປັນອັນຕະລາຍຈາກການທີ່ບໍ່ເປັນອັນຕະລາຍ
ອັນ. ຖ້າ "dieLevel" ແມ່ນເຖິງແມ່ນ 1, ຫຼັງຈາກນັ້ນ, ຂໍ້ຍົກເວັ້ນທີ່ບໍ່ແມ່ນຄວາມຕາຍຂອງເຈົ້າຍັງຖືກຕິດຕາມ
ແລະມີການປ່ຽນແປງ unceremoniously ຖ້າພວກເຂົາມາຈາກ "eval'ed" ຊ່ອຍແນ່ຫຼືຈາກໃດໆ
ປະເພດຂອງ "eval" ພາຍໃນໂມດູນທີ່ທ່ານກໍາລັງພະຍາຍາມໂຫລດ. ຖ້າ "dieLevel" ແມ່ນ 2,
debugger ບໍ່ສົນໃຈບ່ອນທີ່ພວກເຂົາມາຈາກ: ມັນ usurps ຂໍ້ຍົກເວັ້ນຂອງທ່ານ
handler ແລະພິມອອກຕາມຮອຍ, ຫຼັງຈາກນັ້ນແກ້ໄຂຂໍ້ຍົກເວັ້ນທັງຫມົດດ້ວຍຂອງຕົນເອງ
ເຄື່ອງແຕ່ງກາຍ. ນີ້ອາດຈະເປັນປະໂຫຍດສໍາລັບຈຸດປະສົງການຕິດຕາມບາງຢ່າງ, ແຕ່
ມີແນວໂນ້ມທີ່ຈະທໍາລາຍໂຄງການໃດໆກໍຕາມທີ່ມີຂໍ້ຍົກເວັ້ນຢ່າງສິ້ນຫວັງ
ຢ່າງຈິງຈັງ.
"AutoTrace" ຮູບແບບການຕິດຕາມ (ຄ້າຍກັບຄໍາສັ່ງ "t", ແຕ່ສາມາດໃສ່ເຂົ້າໄປໃນ "PERLDB_OPTS").
"LineInfo" ໄຟລ໌ຫຼືທໍ່ເພື່ອພິມຂໍ້ມູນເລກແຖວໄປຫາ. ຖ້າມັນເປັນທໍ່ (ເວົ້າວ່າ,
"|visual_perl_db"), ຫຼັງຈາກນັ້ນຂໍ້ຄວາມສັ້ນຖືກໃຊ້. ນີ້ແມ່ນກົນໄກທີ່ໃຊ້
ໂຕ້ຕອບກັບຕົວແກ້ໄຂ slave ຫຼື visual debugger ເຊັ່ນ "vi" ພິເສດ.
ຫຼື "emacs" hooks, ຫຼື "ddd" graphical debugger.
"inhibit_exit"
ຖ້າ 0, ອະນຸຍາດ ກ້າວ ໄປ ໃນຕອນທ້າຍຂອງ script ໄດ້.
"PrintRet" ພິມຄ່າກັບຄືນຫຼັງຈາກຄໍາສັ່ງ "r" ຖ້າຕັ້ງ (ຄ່າເລີ່ມຕົ້ນ).
"ເຄື່ອງປະດັບ" ມີຜົນກະທົບຫນ້າຈໍຂອງແຖວຄໍາສັ່ງ (ເບິ່ງ Term::ReadLine). ມີ
ໃນປັດຈຸບັນບໍ່ມີວິທີທີ່ຈະປິດການທໍາງານເຫຼົ່ານີ້, ເຊິ່ງສາມາດເຮັດໃຫ້ຜົນຜະລິດບາງອັນທີ່ບໍ່ສາມາດອ່ານໄດ້
ການສະແດງບາງ, ຫຼືມີ pagers ບາງ. ອັນນີ້ຖືວ່າເປັນແມງໄມ້.
"frame" ຜົນກະທົບຕໍ່ການພິມຂໍ້ຄວາມໃນເວລາເຂົ້າແລະອອກຈາກກິດຍ່ອຍ. ຖ້າ
"frame & 2" ແມ່ນຜິດ, ຂໍ້ຄວາມຖືກພິມໃສ່ພຽງແຕ່ເຂົ້າ. (ການພິມອອກ
ອາດຈະເປັນປະໂຫຍດຖ້າ interspersed ກັບຂໍ້ຄວາມອື່ນໆ.)
ຖ້າ "ກອບ & 4", ການໂຕ້ຖຽງກັບຟັງຊັນຖືກພິມ, ບວກກັບສະພາບການແລະຜູ້ໂທ
ຂໍ້ມູນ. ຖ້າ "ກອບ & 8", overloaded "stringify" ແລະ "tie"d "FETCH" ຖືກເປີດໃຊ້ໃນ
ການໂຕ້ຖຽງທີ່ພິມອອກ. ຖ້າ "frame & 16", ມູນຄ່າກັບຄືນຈາກ subroutine
ຖືກພິມອອກ.
ຄວາມຍາວທີ່ລາຍຊື່ອາກິວເມັນຖືກຕັດຖືກຄວບຄຸມໂດຍອັນຕໍ່ໄປ
ຕົວເລືອກ:
"maxTraceLen"
ຄວາມຍາວເພື່ອຕັດລາຍຊື່ການໂຕ້ແຍ້ງເມື່ອຕົວເລືອກ "ກອບ" ບິດ 4 ຖືກຕັ້ງ.
"ຂະຫນາດປ່ອງຢ້ຽມ"
ປ່ຽນຂະໜາດຂອງໜ້າຕ່າງລາຍການລະຫັດ (ຄ່າເລີ່ມຕົ້ນແມ່ນ 10 ແຖວ).
ຕົວເລືອກຕໍ່ໄປນີ້ມີຜົນກະທົບຕໍ່ສິ່ງທີ່ເກີດຂື້ນກັບຄໍາສັ່ງ "V", "X", ແລະ "x":
"arrayDepth", "hashDepth"
ພິມພຽງແຕ່ອົງປະກອບ N ທໍາອິດ (''ສໍາລັບທັງຫມົດ).
"dumpDepth" ຈໍາກັດຄວາມເລິກ recursion ໃນລະດັບ N ເມື່ອໂຄງສ້າງ dumping. ຄ່າທາງລົບ
ຖືກຕີຄວາມວ່າເປັນ infinity. ຄ່າເລີ່ມຕົ້ນ: infinity.
"compactDump", "ຫຼາຍກະທັດຮັດ"
ປ່ຽນຮູບແບບຂອງ array ແລະ hash output. ຖ້າ "compactDump", array ສັ້ນອາດຈະ
ພິມອອກເປັນແຖວດຽວ.
"globPrint" ບໍ່ວ່າຈະພິມເນື້ອໃນຂອງ globs.
"DumpDBFiles"
Dump arrays ຖືໄຟລ໌ດີບັກ.
"DumpPackages"
ຖິ້ມຕາຕະລາງສັນຍາລັກຂອງຊຸດ.
"ໃຊ້ຄືນແລ້ວ"
ຖິ້ມເນື້ອໃນຂອງທີ່ຢູ່ "ໃຊ້ຄືນ".
"quote", "HighBit", "undefPrint"
ປ່ຽນຮູບແບບການຖິ້ມຂີ້ເຫຍື້ອ. ຄ່າເລີ່ມຕົ້ນຂອງ "quote" ແມ່ນ "ອັດຕະໂນມັດ"; ຫນຶ່ງ
ສາມາດເປີດໃຊ້ຮູບແບບ double-quotish ຫຼື single-quotish ໂດຍການຕັ້ງມັນເປັນ """ ຫຼື
"'", ຕາມລໍາດັບ. ໂດຍຄ່າເລີ່ມຕົ້ນ, ຕົວອັກສອນທີ່ມີຊຸດບິດສູງຂອງພວກມັນຖືກພິມອອກ
ຄຳເວົ້າ.
"UsageOnly" ການຖິ້ມການໃຊ້ຄວາມຈຳຕໍ່ແພັກເກັດໂດຍພື້ນຖານ. ຄິດໄລ່ຂະໜາດທັງໝົດຂອງສະຕຣິງ
ພົບເຫັນຢູ່ໃນຕົວແປໃນຊຸດ. ນີ້ບໍ່ລວມ lexicals ໃນ a
ຂອບເຂດໄຟລ໌ຂອງໂມດູນ, ຫຼືສູນເສຍໃນການປິດ.
"HistFile" ເສັ້ນທາງຂອງໄຟລ໌ທີ່ປະຫວັດສາດ (ສົມມຸດວ່າຄໍາສັບທີ່ໃຊ້ໄດ້::ReadLine
backend) ຈະຖືກອ່ານຢູ່ໃນການເລີ່ມຕົ້ນຂອງ debugger, ແລະມັນຈະຖືກບັນທຶກໄວ້
ໃນການປິດ (ສໍາລັບການຄົງຢູ່ໃນທົ່ວກອງປະຊຸມ). ຄ້າຍຄືກັນໃນແນວຄວາມຄິດຂອງ Bash
ໄຟລ໌ ".bash_history".
"HistSize" ການນັບຂອງເສັ້ນທີ່ບັນທຶກໄວ້ໃນປະຫວັດສາດ (ສົມມຸດວ່າ "HistFile" ຂ້າງເທິງ).
ຫຼັງຈາກໄຟລ໌ rc ຖືກອ່ານແລ້ວ, debugger ອ່ານຕົວແປສະພາບແວດລ້ອມ $ENV{PERLDB_OPTS}
ແລະ parses ນີ້ແມ່ນສ່ວນທີ່ເຫຼືອຂອງເສັ້ນ "O ... " ເປັນຫນຶ່ງອາດຈະເຂົ້າໄປໃນ debugger ໄດ້
ດ່ວນ. ທ່ານອາດຈະວາງຕົວເລືອກການເລີ່ມຕົ້ນ "TTY", "noTTY", "ReadLine", ແລະ
"ບໍ່ຢຸດ" ຢູ່ທີ່ນັ້ນ.
ຖ້າໄຟລ໌ rc ຂອງທ່ານປະກອບດ້ວຍ:
parse_options("NonStop=1 LineInfo=db.out AutoTrace");
ຫຼັງຈາກນັ້ນ, script ຂອງທ່ານຈະດໍາເນີນການໂດຍບໍ່ມີການແຊກແຊງຂອງມະນຸດ, ການວາງຂໍ້ມູນການຕິດຕາມເຂົ້າໄປໃນ
ເອກະສານ db.out. (ຖ້າທ່ານຂັດຂວາງມັນ, ທ່ານຄວນຕັ້ງຄ່າ "LineInfo" ໃໝ່ /dev/tty ຖ້າເຈົ້າ
ຄາດຫວັງວ່າຈະເຫັນຫຍັງ.)
"TTY" TTY ທີ່ຈະໃຊ້ສໍາລັບການດີບັກ I/O.
"noTTY" ຖ້າຕັ້ງ, debugger ຈະເຂົ້າສູ່ໂໝດ "NonStop" ແລະຈະບໍ່ເຊື່ອມຕໍ່ກັບ TTY.
ຖ້າຖືກລົບກວນ (ຫຼືຖ້າການຄວບຄຸມໄປຫາຕົວດີບັກຜ່ານການຕັ້ງຄ່າທີ່ຊັດເຈນ
$DB::signal ຫຼື $DB::single ຈາກ Perl script), ມັນເຊື່ອມຕໍ່ກັບ TTY.
ລະບຸໄວ້ໃນຕົວເລືອກ "TTY" ໃນຕອນເລີ່ມຕົ້ນ, ຫຼືໄປຫາ tty ທີ່ພົບໃນເວລາແລ່ນໂດຍໃຊ້
ໂມດູນ "Term::Rendezvous" ທີ່ທ່ານເລືອກ.
ໂມດູນນີ້ຄວນປະຕິບັດວິທີການທີ່ມີຊື່ວ່າ "ໃຫມ່" ທີ່ສົ່ງຄືນວັດຖຸທີ່ມີ
ສອງວິທີ: "IN" ແລະ "OUT". ສິ່ງເຫຼົ່ານີ້ຄວນສົ່ງຄືນ filehandles ເພື່ອໃຊ້
debugging input ແລະ output ສອດຄ້ອງກັນ. ວິທີການ "ໃຫມ່" ຄວນກວດກາ
argument ທີ່ມີຄ່າຂອງ $ENV{PERLDB_NOTTY} ໃນຕອນເລີ່ມຕົ້ນ, ຫຼື
"$ENV{HOME}/.perldbtty$$" ຖ້າບໍ່ດັ່ງນັ້ນ. ໄຟລ໌ນີ້ບໍ່ໄດ້ຖືກກວດສອບຢ່າງຖືກຕ້ອງ
ການເປັນເຈົ້າຂອງ, ດັ່ງນັ້ນອັນຕະລາຍດ້ານຄວາມປອດໄພແມ່ນເປັນໄປໄດ້ທາງທິດສະດີ.
"ReadLine" ຖ້າເປັນຜິດ, ການຮອງຮັບ readline ໃນຕົວດີບັກຖືກປິດການໃຊ້ງານເພື່ອດີບັກ
ແອັບພລິເຄຊັນທີ່ຕົນເອງໃຊ້ ReadLine.
"NonStop" ຖ້າຕັ້ງ, debugger ຈະເຂົ້າໄປໃນໂໝດບໍ່ໂຕ້ຕອບຈົນກວ່າຈະຖືກລົບກວນ, ຫຼື
ໂປຣແກຣມໂດຍການຕັ້ງ $DB::signal ຫຼື $DB::single.
ນີ້ແມ່ນຕົວຢ່າງຂອງການໃຊ້ຕົວແປ $ENV{PERLDB_OPTS}:
$ PERLDB_OPTS="NonStop frame=2" perl -d myprogram
ນີ້ຈະດໍາເນີນການ script ໂຄງການຂອງຂ້ອຍ ໂດຍບໍ່ມີການແຊກແຊງຂອງມະນຸດ, ພິມອອກຕົ້ນໄມ້ໂທຫາ
ກັບຈຸດເຂົ້າແລະອອກ. ໃຫ້ສັງເກດວ່າ "NonStop=1 frame=2" ເທົ່າກັບ "N f=2", ແລະ
ໃນເບື້ອງຕົ້ນ, ທາງເລືອກສາມາດຖືກຫຍໍ້ໂດຍຕົວອັກສອນທໍາອິດ (modulo the
ຕົວເລືອກ "Dump*"). ຢ່າງໃດກໍຕາມ, ມັນແມ່ນແນະນໍາໃຫ້ທ່ານສະກົດຄໍາໃຫ້ເຂົາເຈົ້າສະເຫມີ
ສໍາລັບຄວາມຖືກຕ້ອງແລະຄວາມເຂົ້າກັນໄດ້ໃນອະນາຄົດ.
ຕົວຢ່າງອື່ນໆປະກອບມີ
$ PERLDB_OPTS="NonStop LineInfo=listing frame=2" perl -d myprogram
ເຊິ່ງແລ່ນສະຄຣິບແບບບໍ່ໂຕ້ຕອບ, ພິມຂໍ້ມູນໃນແຕ່ລະລາຍການເຂົ້າເປັນປະຈຳຍ່ອຍ ແລະ
ແຕ່ລະເສັ້ນປະຕິບັດເຂົ້າໄປໃນໄຟລ໌ທີ່ມີຊື່ ກິ. (ຖ້າທ່ານຂັດຂວາງມັນ, ທ່ານຈະດີກວ່າ
ຣີເຊັດ "LineInfo" ເປັນບາງສິ່ງບາງຢ່າງ "ໂຕ້ຕອບ"!)
ຕົວຢ່າງອື່ນໆລວມມີ (ການໃຊ້ syntax shell ມາດຕະຖານເພື່ອສະແດງຕົວແປສະພາບແວດລ້ອມ
ການຕັ້ງຄ່າ):
$ ( PERLDB_OPTS="NonStop frame=1 AutoTrace LineInfo=tperl.out"
perl -d myprogram)
ເຊິ່ງອາດຈະເປັນປະໂຫຍດສໍາລັບການ debugging ໂຄງການທີ່ໃຊ້ "Term::ReadLine" ຕົວຂອງມັນເອງ. ຢ່າ
ລືມຖອດແກະຂອງທ່ານອອກຈາກ TTY ຢູ່ໃນປ່ອງຢ້ຽມທີ່ສອດຄ້ອງກັນ /dev/ttyXX,
ເວົ້າວ່າ, ໂດຍການອອກຄໍາສັ່ງເຊັ່ນ
ນອນ 1000000$
ເບິ່ງ "Debugger Internals" ໃນ perldebguts ສໍາລັບລາຍລະອຽດ.
Debugger Input / Output
Prompt ການກະຕຸ້ນເຕືອນ debugger ແມ່ນບາງສິ່ງບາງຢ່າງເຊັ່ນ:
DB<8>
ຫຼືແມ້ກະທັ້ງ
DB<<17>>
ບ່ອນທີ່ຕົວເລກນັ້ນເປັນຕົວເລກຄໍາສັ່ງ, ແລະທີ່ເຈົ້າຈະໃຊ້ເພື່ອເຂົ້າເຖິງກັບ
ສ້າງຂຶ້ນໃນ csh- ເຊັ່ນ: ກົນໄກປະຫວັດສາດ. ຕົວຢ່າງ, "!17" ຈະເຮັດຊ້ຳຄຳສັ່ງ
ຈໍານວນ 17. ຄວາມເລິກຂອງວົງເລັບມຸມຊີ້ບອກຄວາມເລິກຂອງຮັງຂອງ
ດີບັກ. ທ່ານສາມາດໄດ້ຮັບຫຼາຍກວ່າຫນຶ່ງຊຸດຂອງວົງເລັບ, ຕົວຢ່າງ, ຖ້າທ່ານຕ້ອງການ
ແລ້ວຢູ່ທີ່ຈຸດຢຸດແລະຫຼັງຈາກນັ້ນພິມຜົນຂອງການເອີ້ນຟັງຊັນນັ້ນເອງ
ມີຈຸດຢຸດ, ຫຼືທ່ານກ້າວເຂົ້າໄປໃນການສະແດງອອກໂດຍຜ່ານຄໍາສັ່ງ "s / n / t expression".
ຄໍາສັ່ງຫຼາຍແຖວ
ຖ້າທ່ານຕ້ອງການໃສ່ຄໍາສັ່ງຫຼາຍເສັ້ນ, ເຊັ່ນຄໍານິຍາມ subroutine ກັບ
ຄໍາຖະແຫຼງທີ່ຫຼາຍຫຼືຮູບແບບ, ຫນີເສັ້ນໃຫມ່ທີ່ປົກກະຕິຈະສິ້ນສຸດ
ຄໍາສັ່ງ debugger ກັບ backslash. ນີ້ແມ່ນຕົວຢ່າງ:
DB<1> ສໍາລັບ (1..4) {
cont: ພິມ "ok\n";
ສືບຕໍ່: }
ok
ok
ok
ok
ໃຫ້ສັງເກດວ່າທຸລະກິດຂອງການຫລົບຫນີໃຫມ່ນີ້ແມ່ນສະເພາະກັບຄໍາສັ່ງແບບໂຕ້ຕອບ
ພິມເຂົ້າໄປໃນ debugger ໄດ້.
stack backtrace
ນີ້ແມ່ນຕົວຢ່າງຂອງສິ່ງທີ່ stack backtrace ຜ່ານຄໍາສັ່ງ "T" ອາດຈະຄ້າຍຄື:
$ = main::infested ເອີ້ນຈາກໄຟລ໌ 'Ambulation.pm' line 10
@ = Ambulation::legs(1, 2, 3, 4) ເອີ້ນຈາກໄຟລ໌ ' camel_flea' line 7
$ = main:: pests('bactrian', 4) ເອີ້ນຈາກໄຟລ໌ 'camel_flea' line 4
ຕົວອັກສອນຊ້າຍຢູ່ເທິງນັ້ນຊີ້ບອກສະພາບການທີ່ຟັງຊັນນັ້ນ
ເອີ້ນວ່າ, ດ້ວຍ "$" ແລະ "@" ຫມາຍຄວາມວ່າ scalar ຫຼືບັນຊີລາຍການຕາມລໍາດັບ, ແລະ "."
ຄວາມຫມາຍ void context (ຊຶ່ງໃນຕົວຈິງແມ່ນການຈັດລຽງຂອງ scalar context). ຈໍສະແດງຜົນ
ຂ້າງເທິງບອກວ່າເຈົ້າຢູ່ໃນຫນ້າທີ່ "main::infested" ເມື່ອທ່ານແລ່ນ stack
dump, ແລະວ່າມັນຖືກເອີ້ນໃນ scalar context ຈາກແຖວ 10 ຂອງໄຟລ໌
Ambulation.pm, ແຕ່ບໍ່ມີການໂຕ້ຖຽງໃດໆ, ຊຶ່ງຫມາຍຄວາມວ່າມັນຖືກເອີ້ນວ່າເປັນ
&ຕິດເຊື້ອ. ກອບ stack ຕໍ່ໄປສະແດງໃຫ້ເຫັນວ່າຫນ້າທີ່ "Ambulation::legs" ແມ່ນ
ເອີ້ນໃນບໍລິບົດລາຍການຈາກ camel_flea ໄຟລ໌ທີ່ມີສີ່ການໂຕ້ຖຽງ. ສຸດທ້າຍ
stack frame ສະແດງໃຫ້ເຫັນວ່າ "main::pests" ຖືກເອີ້ນໃນ scalar context, ຍັງມາຈາກ
camel_flea, ແຕ່ຈາກແຖວທີ 4.
ຖ້າທ່ານປະຕິບັດຄໍາສັ່ງ "T" ຈາກພາຍໃນຄໍາສັ່ງ "ໃຊ້" ທີ່ໃຊ້ວຽກ, the
backtrace ຈະມີທັງກອບ "ຕ້ອງການ" ແລະກອບ "eval".
ຮູບແບບລາຍຊື່ເສັ້ນ
ນີ້ສະແດງໃຫ້ເຫັນປະເພດຂອງຜົນຜະລິດຄໍາສັ່ງ "l" ສາມາດຜະລິດ:
DB<<13>> l
101: @i{@i} = ();
102:b @isa{@i,$pack} = ()
103 if(exists $i{$prevpack} || exists $isa{$pack});
104 }
105
106 ຕໍ່ໄປ
107==> ຖ້າ(ມີ $isa{$pack});
108
109:a ຖ້າ ($ extra--> 0) {
110: %isa = ($pack,1);
ເສັ້ນທີ່ສາມາດແຍກໄດ້ແມ່ນໝາຍດ້ວຍ ":". ເສັ້ນທີ່ມີຈຸດແບ່ງແມ່ນຫມາຍດ້ວຍ "b" ແລະ
ຜູ້ທີ່ມີການກະທໍາໂດຍ "a". ເສັ້ນທີ່ກໍາລັງຈະຖືກປະຕິບັດແມ່ນຫມາຍໂດຍ
"==>".
ກະລຸນາຮັບຊາບວ່າລະຫັດໃນລາຍການ debugger ອາດຈະບໍ່ຄືກັບຂອງທ່ານ
ລະຫັດແຫຼ່ງຕົ້ນສະບັບ. ຄໍາສັ່ງສາຍແລະການກັ່ນຕອງແຫຼ່ງພາຍນອກສາມາດປ່ຽນແປງໄດ້
ລະຫັດກ່ອນທີ່ Perl ເຫັນມັນ, ເຮັດໃຫ້ລະຫັດຍ້າຍອອກຈາກຕໍາແຫນ່ງເດີມຂອງມັນຫຼືເອົາ
ໃນຮູບແບບທີ່ແຕກຕ່າງກັນທັງຫມົດ.
ລາຍຊື່ກອບ
ເມື່ອຕົວເລືອກ "ກອບ" ຖືກຕັ້ງ, debugger ຈະພິມເຂົ້າ (ແລະທາງເລືອກ
exited) subroutines ໃນຮູບແບບທີ່ແຕກຕ່າງກັນ. ເບິ່ງ perldebguts ສໍາລັບຍາວ incredibly
ຕົວຢ່າງຂອງສິ່ງເຫຼົ່ານີ້.
Debugging ລວບລວມເວລາ ບົດລາຍງານ
ຖ້າຫາກວ່າທ່ານມີການປະຕິບັດການປະຕິບັດການປະຕິບັດຕາມເວລາ (ເຊັ່ນ: ລະຫັດພາຍໃນ BEGIN, UNITCHECK ແລະ
ກວດເບິ່ງຕັນຫຼື "ໃຊ້" ຄໍາຖະແຫຼງ), ເຫຼົ່ານີ້ຈະ ບໍ່ ຖືກຢຸດໂດຍ debugger, ເຖິງແມ່ນວ່າ
"require"s ແລະ INIT blocks ຈະ, ແລະການລວບລວມຄໍາຖະແຫຼງທີ່ໃຊ້ເວລາສາມາດຕິດຕາມໄດ້.
ຕົວເລືອກ "AutoTrace" ທີ່ຕັ້ງໄວ້ໃນ "PERLDB_OPTS"). ຈາກລະຫັດ Perl ຂອງທ່ານເອງ, ຢ່າງໃດກໍຕາມ, ທ່ານສາມາດເຮັດໄດ້
ໂອນການຄວບຄຸມກັບຄືນໄປຫາຕົວດີບັກໂດຍໃຊ້ຄໍາຖະແຫຼງຕໍ່ໄປນີ້, ເຊິ່ງບໍ່ເປັນອັນຕະລາຍຖ້າ
debugger ບໍ່ເຮັດວຽກ:
$DB::single = 1;
ຖ້າທ່ານຕັ້ງ $DB::single ເປັນ 2, ມັນເທົ່າກັບພຽງແຕ່ພິມຄໍາສັ່ງ "n", ໃນຂະນະທີ່.
ຄ່າຂອງ 1 ຫມາຍຄວາມວ່າຄໍາສັ່ງ "s". ຕົວແປ $DB::trace ຄວນຖືກຕັ້ງເປັນ 1 ຫາ
simulate ໂດຍພິມຄໍາສັ່ງ "t".
ອີກວິທີໜຶ່ງທີ່ຈະດີບັກການລວບລວມລະຫັດເວລາແມ່ນການເລີ່ມຕົ້ນການດີບັກ, ຕັ້ງຈຸດຢຸດຢູ່
load ຂອງບາງໂມດູນ:
DB<7> b ໂຫຼດ f:/perllib/lib/Carp.pm
ຈະຢຸດໃນການໂຫຼດ 'f:/perllib/lib/Carp.pm'.
ແລະຫຼັງຈາກນັ້ນ restart debugger ໂດຍໃຊ້ຄໍາສັ່ງ "R" (ຖ້າເປັນໄປໄດ້). ຫນຶ່ງສາມາດນໍາໃຊ້ "b compile
subname" ສໍາລັບຈຸດປະສົງດຽວກັນ.
Debugger ປັບ
debugger ອາດຈະປະກອບດ້ວຍ hooks ການຕັ້ງຄ່າພຽງພໍທີ່ທ່ານຈະບໍ່ມີ
ປັບປຸງແກ້ໄຂມັນຕົວທ່ານເອງ. ທ່ານອາດຈະປ່ຽນພຶດຕິກໍາຂອງ debugger ຈາກພາຍໃນ debugger ໄດ້
ການນໍາໃຊ້ຄໍາສັ່ງ "o" ຂອງມັນ, ຈາກເສັ້ນຄໍາສັ່ງຜ່ານຕົວແປສະພາບແວດລ້ອມ "PERLDB_OPTS",
ແລະຈາກໄຟລ໌ປັບແຕ່ງ.
ທ່ານສາມາດເຮັດການປັບແຕ່ງບາງຢ່າງໂດຍການຕັ້ງ a .perldb ໄຟລ໌, ເຊິ່ງປະກອບດ້ວຍການເລີ່ມຕົ້ນ
ລະຫັດ. ຕົວຢ່າງ, ເຈົ້າສາມາດສ້າງນາມແຝງແບບນີ້ໄດ້ (ອັນສຸດທ້າຍແມ່ນຄົນທີ່ຄາດຫວັງ
ຢູ່ທີ່ນັ້ນ):
$DB::alias{'len'} = 's/^len(.*)/p length($1)/';
$DB::alias{'stop'} = 's/^stop (at|in)/b/';
$DB::alias{'ps'} = 's/^ps\b/p scalar /';
$DB::alias{'quit'} = 's/^quit(\s*)/exit/';
ທ່ານສາມາດປ່ຽນທາງເລືອກຈາກ .perldb ໂດຍໃຊ້ການໂທເຊັ່ນນີ້;
parse_options("NonStop=1 LineInfo=db.out AutoTrace=1 frame=2");
ລະຫັດຖືກປະຕິບັດຢູ່ໃນຊຸດ "DB". ໃຫ້ສັງເກດວ່າ .perldb ຖືກປຸງແຕ່ງກ່ອນ
ກຳລັງປະມວນຜົນ "PERLDB_OPTS". ຖ້າ .perldb ກໍານົດ subroutine "afterinit", ຫນ້າທີ່ແມ່ນ
ເອີ້ນວ່າຫຼັງຈາກການເລີ່ມຕົ້ນ debugger ສິ້ນສຸດລົງ. .perldb ອາດຈະບັນຈຸຢູ່ໃນປະຈຸບັນ
ໄດເລກະທໍລີ, ຫຼືຢູ່ໃນໄດເລກະທໍລີເຮືອນ. ເນື່ອງຈາກວ່າໄຟລ໌ນີ້ແມ່ນມາຈາກ Perl ແລະອາດຈະ
ມີຄໍາສັ່ງທີ່ມັກ, ສໍາລັບເຫດຜົນດ້ານຄວາມປອດໄພ, ມັນຕ້ອງເປັນເຈົ້າຂອງໂດຍ superuser ຫຼື
ຜູ້ໃຊ້ໃນປະຈຸບັນ, ແລະຂຽນໄດ້ໂດຍບໍ່ມີໃຜນອກຈາກເຈົ້າຂອງມັນ.
ທ່ານສາມາດເຍາະເຍີ້ຍການປ້ອນຂໍ້ມູນ TTY ໄປຫາຕົວດີບັກໄດ້ໂດຍການເພີ່ມຄໍາສັ່ງ arbitrary ໃສ່ @DB::typeahead. ສໍາລັບ
ຕົວຢ່າງ, ຂອງທ່ານ .perldb ໄຟລ໌ອາດມີ:
sub afterinit { push @DB::typeahead, "b 4", "b 6"; }
ເຊິ່ງຈະພະຍາຍາມຕັ້ງຈຸດຢຸດຢູ່ແຖວ 4 ແລະ 6 ທັນທີຫຼັງຈາກດີບັກ
ການເລີ່ມຕົ້ນ. ໃຫ້ສັງເກດວ່າ @DB::typeahead ບໍ່ແມ່ນການໂຕ້ຕອບທີ່ສະຫນັບສະຫນູນແລະເປັນໄປຕາມ
ການປ່ຽນແປງໃນການປ່ອຍໃນອະນາຄົດ.
ຖ້າທ່ານຕ້ອງການແກ້ໄຂ debugger, ຄັດລອກ perl5db.pl ຈາກຫໍສະຫມຸດ Perl ກັບຊື່ອື່ນ
ແລະ hack ມັນກັບເນື້ອໃນຫົວໃຈຂອງທ່ານ. ຈາກນັ້ນທ່ານຈະຕ້ອງການຕັ້ງສະພາບແວດລ້ອມ "PERL5DB" ຂອງທ່ານ
ຕົວແປທີ່ຈະເວົ້າບາງສິ່ງບາງຢ່າງເຊັ່ນນີ້:
BEGIN { ຕ້ອງການ "myperl5db.pl" }
ເປັນທາງເລືອກສຸດທ້າຍ, ທ່ານຍັງສາມາດໃຊ້ "PERL5DB" ເພື່ອປັບແຕ່ງຕົວດີບັກໄດ້ໂດຍກົງ
ຕັ້ງຄ່າຕົວແປພາຍໃນ ຫຼືເອີ້ນຟັງຊັນດີບັກ.
ໃຫ້ສັງເກດວ່າຕົວແປແລະຫນ້າທີ່ໃດໆທີ່ບໍ່ໄດ້ບັນທຶກໄວ້ໃນເອກະສານນີ້ (ຫຼືໃນ
perldebguts) ຖືກພິຈາລະນາສໍາລັບການນໍາໃຊ້ພາຍໃນເທົ່ານັ້ນ, ແລະດັ່ງນັ້ນແມ່ນມີການປ່ຽນແປງ
ໂດຍບໍ່ຕ້ອງແຈ້ງ.
ເສັ້ນອ່ານ ສະຫນັບສະຫນູນ / ປະຫວັດສາດ in ໄດ້ Debugger
ດັ່ງທີ່ສົ່ງມາ, ປະຫວັດເສັ້ນຄໍາສັ່ງດຽວທີ່ສະຫນອງໃຫ້ແມ່ນງ່າຍດາຍທີ່ກວດສອບ
ຈຸດ exclamation ນໍາ. ຢ່າງໃດກໍຕາມ, ຖ້າທ່ານຕິດຕັ້ງ Term::ReadKey ແລະ Term::ReadLine
ໂມດູນຈາກ CPAN (ເຊັ່ນ: Term::ReadLine::Gnu, Term::ReadLine::Perl, ...) ທ່ານຈະມີ
ຄວາມສາມາດໃນການແກ້ໄຂອັນເຕັມທີ່ຄືກັບ GNU ເຫຼົ່ານັ້ນ ເສັ້ນອ່ານ(3) ສະຫນອງ. ຊອກຫາສິ່ງເຫຼົ່ານີ້ຢູ່ໃນ
modules/by-module/Term ໄດເລກະທໍລີໃນ CPAN. ເຫຼົ່ານີ້ບໍ່ສະຫນັບສະຫນູນປົກກະຕິ vi ເສັ້ນຄໍາສັ່ງ
ການແກ້ໄຂ, ຢ່າງໃດກໍຕາມ.
ການສໍາເລັດເສັ້ນຄໍາສັ່ງຂັ້ນພື້ນຖານແມ່ນມີຢູ່, ລວມທັງຕົວແປ lexical ໃນ
ຂອບເຂດປະຈຸບັນຖ້າໂມດູນ "PadWalker" ຖືກຕິດຕັ້ງ.
ໂດຍບໍ່ມີການສະຫນັບສະຫນູນ Readline ທ່ານອາດຈະເຫັນສັນຍາລັກ "^[[A", "^[[C", "^[[B", "^[[D"", "^H",
... ເມື່ອໃຊ້ປຸ່ມລູກສອນ ແລະ/ຫຼືປຸ່ມ backspace.
ບັນນາທິການ ສະຫນັບສະຫນູນ ສໍາລັບການ Debugging
ຖ້າທ່ານມີ GNU ຮຸ່ນຂອງ emacs ຕິດຕັ້ງຢູ່ໃນລະບົບຂອງທ່ານ, ມັນສາມາດພົວພັນກັບ
Perl debugger ເພື່ອສະຫນອງສະພາບແວດລ້ອມການພັດທະນາຊອບແວປະສົມປະສານ reminiscent ຂອງມັນ
ການໂຕ້ຕອບກັບ C debuggers.
ຮຸ່ນຫຼ້າສຸດຂອງ Emacs ມາພ້ອມກັບໄຟລ໌ເລີ່ມຕົ້ນສໍາລັບການສ້າງ emacs ເຮັດຄື syntax-
ບັນນາທິການຊີ້ນໍາທີ່ເຂົ້າໃຈ (ບາງສ່ວນຂອງ) syntax ຂອງ Perl. ເບິ່ງ perlfaq3.
ຜູ້ໃຊ້ຂອງ vi ຄວນເບິ່ງເຂົ້າໄປໃນ vim ແລະ ຈີມ, ສະບັບ mousey ແລະ windy, ສໍາລັບການໃສ່ສີ
ຂອງຄໍາສໍາຄັນ Perl.
ໃຫ້ສັງເກດວ່າມີພຽງ perl ແທ້ໆທີ່ສາມາດແຍກ Perl, ດັ່ງນັ້ນເຄື່ອງມື CASE ດັ່ງກ່າວທັງຫມົດແມ່ນຂາດແຄນ
ເຄື່ອງຫມາຍ, ໂດຍສະເພາະຖ້າທ່ານບໍ່ຂຽນໂປຼແກຼມ Perl ຂອງທ່ານເປັນ C programmer ອາດຈະ.
ໄດ້ Perl ນັກປະກອບອາຊີບ
ຖ້າທ່ານຕ້ອງການສະຫນອງຕົວດີບັ໊ກທາງເລືອກສໍາລັບ Perl ເພື່ອດໍາເນີນການ, ເອີ້ນສະຄິບຂອງທ່ານດ້ວຍ a
ຈໍ້າສອງເມັດແລະການໂຕ້ຖຽງຊຸດທີ່ມອບໃຫ້ກັບ -d ທຸງ. ການດີບັກທາງເລືອກຂອງ Perl ປະກອບມີ a
Perl profiler, Devel::NYTProf, ເຊິ່ງມີຢູ່ແຍກຕ່າງຫາກເປັນການແຈກຢາຍ CPAN. ເຖິງ
profile ໂຄງການ Perl ຂອງທ່ານໃນໄຟລ໌ mycode.pl, ພຽງແຕ່ພິມ:
$ perl -d:NYTProf mycode.pl
ເມື່ອ script ຢຸດ profiler ຈະສ້າງຖານຂໍ້ມູນຂອງຂໍ້ມູນໂປຣໄຟລ໌
ທີ່ທ່ານສາມາດປ່ຽນເປັນບົດລາຍງານໂດຍໃຊ້ເຄື່ອງມືຂອງ profiler. ເບິ່ງ ສໍາລັບລາຍລະອຽດ.
Debugging ເປັນປົກກະຕິ ສຳ ນວນ
"use re 'debug'" ຊ່ວຍໃຫ້ທ່ານເຫັນລາຍລະອຽດ gory ຂອງວິທີການສະແດງອອກປົກກະຕິ Perl
ເຄື່ອງຈັກເຮັດວຽກ. ເພື່ອເຂົ້າໃຈຜົນຜະລິດ voluminous ນີ້ໂດຍທົ່ວໄປ, ຫນຶ່ງຈະຕ້ອງບໍ່ພຽງແຕ່
ມີຄວາມຄິດບາງຢ່າງກ່ຽວກັບວິທີການຈັບຄູ່ການສະແດງອອກເປັນປົກກະຕິເຮັດວຽກໂດຍທົ່ວໄປ, ແຕ່ຍັງຮູ້ວິທີ
ການສະແດງອອກປົກກະຕິຂອງ Perl ໄດ້ຖືກລວບລວມພາຍໃນເປັນ automaton. ເລື່ອງເຫຼົ່ານີ້ແມ່ນ
ສຳຫຼວດໃນບາງລາຍລະອຽດໃນ "Debugging Regular Expressions" ໃນ perldebguts.
Debugging ຫນ່ວຍຄວາມຈໍາ ການນໍາໃຊ້
Perl ມີການສະຫນັບສະຫນູນພາຍໃນສໍາລັບການລາຍງານການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍາຂອງຕົນເອງ, ແຕ່ນີ້ແມ່ນຂ້ອນຂ້າງ
ແນວຄວາມຄິດຂັ້ນສູງທີ່ຮຽກຮ້ອງໃຫ້ມີຄວາມເຂົ້າໃຈບາງຢ່າງກ່ຽວກັບວິທີການຈັດສັນຫນ່ວຍຄວາມຈໍາເຮັດວຽກ. ເບິ່ງ
"Debugging Perl Memory Usage" ໃນ perldebguts ສໍາລັບລາຍລະອຽດ.
ໃຊ້ perldebug ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net