این دستور perldbug است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.
برنامه:
نام
perldbug - اشکال زدایی پرل
شرح
اول از همه، آیا استفاده از -w تعویض؟
اگر با دیباگر Perl تازه کار هستید، ممکن است ترجیح دهید perldebtut را بخوانید که یک آموزش است.
مقدمه ای بر دیباگر
La پرل اشکالزدا
اگر پرل را با -d سوئیچ، اسکریپت شما تحت دیباگر منبع Perl اجرا می شود.
این مانند یک محیط پرل تعاملی عمل می کند و دستورات دیباگر را درخواست می کند که اجازه می دهد
شما کد منبع را بررسی میکنید، نقاط شکست را تنظیم میکنید، پشتههای پشته را دریافت میکنید، مقادیر آن را تغییر میدهید
متغیرها و غیره. این به قدری راحت است که اغلب به تنهایی دیباگر را روشن می کنید
فقط برای آزمایش ساختارهای پرل به صورت تعاملی برای دیدن آنچه انجام می دهند. مثلا:
$ perl -d -e 42
در پرل، دیباگر یک برنامه مجزا نیست که معمولاً در برنامه معمولی است
محیط کامپایل شده در عوض، -d flag به کامپایلر می گوید که منبع را درج کند
اطلاعات در درختان تجزیه قرار است به مترجم تحویل داده شود. یعنی
کد شما ابتدا باید به درستی کامپایل شود تا دیباگر روی آن کار کند. سپس زمانی که
مفسر راه اندازی می شود، یک فایل کتابخانه خاص پرل حاوی اشکال زدا را از قبل بارگذاری می کند.
برنامه متوقف خواهد شد راست قبل از اولین دستور اجرایی زمان اجرا (اما زیر را ببینید
در مورد دستورات زمان کامپایل) و از شما بخواهد که یک دستور دیباگر را وارد کنید. بر خلاف
انتظارات عمومی، هر زمان که دیباگر متوقف می شود و یک خط کد را به شما نشان می دهد، همیشه آن را نشان می دهد
خط آن را نشان می دهد در باره برای اجرا، به جای آن که به تازگی اجرا کرده است.
هر دستوری که توسط دیباگر شناسایی نشود مستقیماً به عنوان کد پرل ("eval"'d) اجرا می شود.
بسته فعلی (اشکالزدا از بسته DB برای حفظ وضعیت خود استفاده میکند
اطلاعات.)
توجه داشته باشید که "eval" مذکور به یک محدوده ضمنی محدود شده است. در نتیجه هر تازه معرفی شده
متغیر واژگانی یا هر محتوای بافر ضبط اصلاح شده پس از eval از بین می رود. در
دیباگر محیط خوبی برای یادگیری پرل است، اما اگر به صورت تعاملی با استفاده از آن آزمایش کنید
موادی که باید در یک محدوده باشند، آن را در یک خط قرار دهید.
برای هر متنی که در اعلان اشکالزدا وارد میشود، فضای خالی اصلی و انتهایی اول است
قبل از پردازش بیشتر از بین می رود. اگر دستور دیباگر با برخی از عملکردها همزمان باشد
برنامه خود را، فقط قبل از تابع با چیزی که شبیه a نیست
دستور دیباگر، مانند یک ";" یا شاید یک "+"، یا با پیچیدن آن با
پرانتز یا پرانتز
صدا زدن la اشکالزدا
چندین راه برای فراخوانی دیباگر وجود دارد:
perl -d program_name
در برنامه مشخص شده با "program_name".
perl -d -e 0
با استفاده از "-e" یک "عبارت" دلخواه را به صورت تعاملی ارائه کنید.
perl -d:ptkdb program_name
یک برنامه داده شده را از طریق رابط کاربری گرافیکی "Devel::ptkdb" اشکال زدایی کنید.
perl -dt threaded_program_name
اشکال زدایی یک برنامه داده شده با استفاده از موضوعات (تجربی).
اشکالزدا دستورات
دیباگر تعاملی دستورات زیر را درک می کند:
h یک پیام راهنمای خلاصه را چاپ می کند
h [فرمان] یک پیام کمکی برای دستور اشکال زدایی داده شده چاپ می کند.
hh آرگومان خاص "hh" کل صفحه راهنما را تولید می کند که کاملاً است
طولانی
اگر خروجی فرمان «hh» (یا هر دستور دیگری) اسکرول شود
از صفحه نمایش خود عبور کنید، قبل از دستور با یک علامت لوله پیشرو قرار دهید تا این فرمان باشد
از طریق پیجر خود را اجرا کنید، همانطور که در
DB> |hh
می توانید پیجر مورد استفاده را از طریق دستور "o pager=..." تغییر دهید.
p expr همانند "print {$DB::OUT} expr" در بسته فعلی. به خصوص،
از آنجا که این فقط تابع "چاپ" خود پرل است، این بدان معنی است که داده های تو در تو
ساختارها و اشیاء بر خلاف دستور "x" ریخته نمی شوند.
فایل "DB::OUT" باز می شود /dev/tty، صرف نظر از جایی که STDOUT ممکن است
هدایت شود به.
x [maxdepth] expr
بیان آن را در زمینه فهرست ارزیابی می کند و نتیجه را به شکلی زیبا حذف می کند
مد چاپ شده ساختارهای داده تودرتو بر خلاف مشابه به صورت بازگشتی چاپ می شوند
تابع واقعی "چاپ" در پرل. هنگام ریختن هش، احتمالا این کار را خواهید کرد
"x \%h" را به جای "x%h" ترجیح می دهند. اگر میخواهید این کار را انجام دهید، Dumpvalue را ببینید
خودتان.
فرمت خروجی توسط چندین گزینه که در زیر توضیح داده شده کنترل می شود
"گزینه های قابل تنظیم".
اگر "maxdepth" گنجانده شود، باید یک عدد باشد N; ارزش تخلیه می شود
فقط N سطوح عمیق، گویی گزینه "dumpDepth" به طور موقت روی تنظیم شده است
N.
V [pkg [vars]]
نمایش همه (یا برخی) متغیرها در بسته (به طور پیش فرض به "اصلی") با استفاده از یک داده
چاپگر زیبا (هش ها کلیدها و مقادیر خود را نشان می دهند تا ببینید چه چیزی چیست،
کاراکترهای کنترل قابل چاپ هستند و غیره). مطمئن شوید که آن را قرار ندهید
مشخص کننده (مانند "$") را در آنجا تایپ کنید، فقط نام نمادها، مانند این:
خط نام فایل V DB
از "~pattern" و "!pattern" برای رجکس های مثبت و منفی استفاده کنید.
این شبیه به فراخوانی دستور "x" در هر var قابل اجرا است.
X [vars] مشابه "V currentpackage [vars]".
y [سطح [vars]]
نمایش همه (یا برخی) متغیرهای واژگانی (مانندیک: متغیرهای "mY") در
دامنه فعلی یا سطح دامنه های بالاتر شما می توانید متغیرهایی را که در اختیار دارید محدود کنید
دیدن با وارس که دقیقاً مانند دستورات "V" و "X" عمل می کند.
به ماژول "PadWalker" نسخه 0.08 یا بالاتر نیاز دارد. در این صورت هشدار خواهد داد
نصب نشده است خروجی به همان سبکی که برای "V" و چاپ شده است بسیار زیبا است
فرمت توسط همان گزینه ها کنترل می شود.
T یک پشته پشته تولید کنید. برای جزئیات بیشتر در مورد خروجی آن به زیر مراجعه کنید.
s [expr] تک مرحله ای. تا ابتدای یک دستور دیگر به صورت نزولی اجرا می شود
به تماس های زیر روال اگر عبارتی ارائه شود که شامل تابع باشد
تماس می گیرد، آن نیز تک مرحله ای خواهد بود.
n [expr] بعدی. از طریق فراخوانی های زیر روال، تا آغاز فراخوان بعدی اجرا می شود
بیانیه. اگر عبارتی ارائه شود که شامل فراخوانی های تابع باشد، آن ها
توابع قبل از هر دستور با توقف اجرا می شوند.
r تا بازگشت از زیربرنامه فعلی ادامه دهید. مقدار برگشتی را تخلیه کنید
اگر گزینه "PrintRet" تنظیم شده باشد (پیش فرض).
آخرین دستور "n" یا "s" را تکرار کنید.
ج [خط|زیر]
ادامه دهید، به صورت اختیاری یک نقطه شکست یک بار در نقطه مشخص شده درج کنید
خط یا زیر برنامه
l پنجره بعدی خطوط را فهرست کنید.
l min+incr خطوط «incr+1» را فهرست کنید که با «min» شروع میشوند.
l min-max خطوط "min" تا "max" را فهرست کنید. "l -" مترادف "-" است.
l خط یک خط را فهرست کنید.
l نام فرعی اولین پنجره خطوط را از زیربرنامه فهرست کنید. نام فرعی ممکن است متغیری باشد که
حاوی یک مرجع کد
- لیست پنجره قبلی خطوط.
v [خط] چند خط کد را در اطراف خط فعلی مشاهده کنید.
. نشانگر دیباگر داخلی را به خطی که آخرین اجرا شده برگردانید و چاپ کنید
آن خط
f نام فایل به مشاهده یک فایل دیگر یا عبارت "eval" بروید. اگر نام فایل نمی باشد
نام مسیر کامل که در مقادیر %INC یافت میشود، یک regex در نظر گرفته میشود.
رشته های "eval" (در صورت دسترسی) به عنوان نام فایل در نظر گرفته می شوند: "f (eval
7)" و "f eval 7\b" به بدنه هفتمین رشته "eval" (به ترتیب) دسترسی پیدا کنید
اجرا). اجساد اعدام شده "eval" و "eval" ed
رشته هایی که زیربرنامه ها را تعریف می کنند ذخیره می شوند و بنابراین قابل دسترسی هستند.
/pattern/ جستجو به جلو برای الگو (یک regex پرل). نهایی / اختیاری است. جستجو
به طور پیش فرض به حروف بزرگ و کوچک حساس نیست.
؟الگو؟ جستجوی عقب برای الگو. نهایی؟ اختیاری است جستجو موردی است -
غیر حساس به طور پیش فرض
L [abw] فهرست (پیشفرض همه) اقدامات، نقاط شکست و عبارات تماشا
S [[!]regex]
نامهای زیربرنامه را فهرست کنید [نه] که با regex مطابقت دارند.
t [n] تغییر حالت ردیابی (همچنین به گزینه "AutoTrace" مراجعه کنید). استدلال اختیاری است
حداکثر تعداد سطوح برای ردیابی زیر سطح فعلی؛ هر چیزی عمیق تر از
که ساکت خواهد شد
t [n] expr ردیابی از طریق اجرای "expr". آرگومان اول اختیاری حداکثر است
تعداد سطوح برای ردیابی زیر سطح فعلی؛ هر چیزی عمیق تر از آن
ساکت خواهد شد برای مشاهده به «نمونههای خروجی فهرست قاب» در perldebguts مراجعه کنید
مثال ها.
b نقطه شکست را روی خط جاری تنظیم می کند
b [خط] [شرط]
قبل از خط داده شده یک نقطه شکست تعیین کنید. اگر شرطی مشخص شده باشد، آن است
با هر بار رسیدن به عبارت مورد ارزیابی قرار می گیرد: تنها در صورتی نقطه انفصال گرفته می شود
شرط درست است نقاط انفصال را فقط می توان در خطوطی که شروع می کنند تنظیم کرد
بیانیه اجرایی در شرایط از "اگر" استفاده نمی شود:
b 237 $x > 30
b 237 ++$count237 < 11
b 33 /pattern/i
اگر شماره خط "." باشد، یک نقطه شکست در خط فعلی تعیین می کند:
ب . $n > 100
b [پرونده]: [خط] [شرط]
یک نقطه شکست قبل از خط داده شده در یک فایل (احتمالاً متفاوت) تنظیم کنید. اگر یک
شرط مشخص شده است، با هر بار رسیدن به عبارت مورد ارزیابی قرار می گیرد: الف
نقطه شکست تنها در صورتی گرفته می شود که شرط درست باشد. نقاط انفصال ممکن است فقط باشد
بر روی خطوطی تنظیم کنید که یک دستور اجرایی را شروع می کنند. در شرایط از "اگر" استفاده نمی شود:
b lib/MyModule.pm:237 $x > 30
b /usr/lib/perl5/site_perl/CGI.pm:100 ++$count100 < 11
b نام فرعی [شرط]
قبل از خط اول زیربرنامه نامگذاری شده یک نقطه شکست تنظیم کنید. نام فرعی ممکن است
یک متغیر حاوی یک مرجع کد باشد (در این مورد شرط نیست
پشتیبانی).
b به تعویق انداختن نام فرعی [شرط]
پس از کامپایل شدن، در خط اول زیربرنامه یک نقطه شکست تنظیم کنید.
b نام فایل را بارگذاری کنید
قبل از اولین خط اجرا شده یک نقطه شکست تنظیم کنید نام فایل، که باید
یک نام مسیر کامل در میان مقادیر %INC باشد.
b نام فرعی را کامپایل کنید
یک نقطه انفصال را قبل از اولین عبارت اجرا شده پس از مشخص شده تنظیم می کند
زیر برنامه تدوین شده است.
خط B یک نقطه شکست را از مشخص شده حذف کنید خط.
ب * تمام نقاط شکست نصب شده را حذف کنید.
غیرفعال کردن [فایل]: [خط]
نقطه شکست را غیرفعال کنید تا اجرای برنامه متوقف نشود.
نقاط انفصال به طور پیش فرض فعال هستند و می توانند با استفاده از "enable" دوباره فعال شوند.
فرمان
غیرفعال کردن [خط]
نقطه شکست را غیرفعال کنید تا اجرای برنامه متوقف نشود.
نقاط انفصال به طور پیش فرض فعال هستند و می توانند با استفاده از "enable" دوباره فعال شوند.
فرمان
این برای یک نقطه شکست در فایل فعلی انجام می شود.
فعال کردن [فایل]: [خط]
نقطه شکست را فعال کنید تا اجرای برنامه متوقف شود.
فعال کردن [خط]
نقطه شکست را فعال کنید تا اجرای برنامه متوقف شود.
این برای یک نقطه شکست در فایل فعلی انجام می شود.
یک فرمان [خط]
یک عمل را تنظیم کنید تا قبل از اجرای خط انجام شود. اگر خط حذف شده است، تنظیم شده است
اقدامی در خط که در شرف اجراست. توالی مراحل انجام شده توسط
اشکال زدا است
1. نقطه شکست را در این خط بررسی کنید
2. در صورت لزوم خط را چاپ کنید (ردیابی)
3. هر گونه اقدام مرتبط با آن خط را انجام دهید
4. کاربر را در نقطه انفصال یا تک مرحله ای اعلان کنید
5. ارزیابی خط
به عنوان مثال، هر بار که خط 53 ارسال می شود، $foo چاپ می شود:
یک چاپ 53 "DB FOUND $foo\n"
یک خط یک عمل را از خط مشخص شده حذف کنید.
A * تمام اقدامات نصب شده را حذف کنید.
w expr یک واچ بیان جهانی اضافه کنید. هر زمان که یک جهانی تماشا شده، دیباگر را تغییر دهد
متوقف می شود و مقادیر قدیمی و جدید را نمایش می دهد.
W expr حذف watch-expression
W * تمام عبارات ساعت را حذف کنید.
o نمایش تمامی گزینه ها
o booloption ...
هر گزینه Boolean لیست شده را روی مقدار 1 تنظیم کنید.
o هیچ گزینه ای؟ ...
مقدار یک یا چند گزینه را چاپ کنید.
o گزینه = مقدار ...
مقدار یک یا چند گزینه را تنظیم کنید. اگر مقدار دارای فضای خالی داخلی باشد،
باید نقل شود. به عنوان مثال، می توانید "o pager="less -MQeicsNfr"" را تنظیم کنید.
تماس گرفتن کمتر با آن گزینه های خاص می توانید از یک یا دو نفره استفاده کنید
نقل قول می کند، اما اگر چنین کردید، باید از هر نمونه جاسازی شده مشابهی فرار کنید
نقل قولی که با آن شروع کردید، و همچنین هر فراری که فوراً از آن فرار کردید
قبل از آن نقل قول قرار می گیرند اما برای فرار از خود نقل قول نیستند. که در
به عبارت دیگر، شما صرف نظر از نقل قول از قوانین تک نقل قول پیروی می کنید. نفس
option='این بد نیست'" یا "o option="گفت، \"مگه نه؟\""".
به دلایل تاریخی، "=value" اختیاری است، اما تنها در جایی که پیشفرض 1 است
انجام این کار بی خطر است - یعنی بیشتر برای گزینه های Boolean. همیشه بهتر است
برای اختصاص یک مقدار خاص با استفاده از "=". "گزینه" را می توان به اختصار، اما
برای وضوح احتمالا نباید باشد. چندین گزینه را می توان با هم تنظیم کرد. دیدن
"گزینه های قابل تنظیم" برای لیستی از اینها.
< ? تمام اقدامات دستور پرل را که از قبل درخواست کرده اند را فهرست کنید.
< [ فرمان ]
یک عمل (فرمان Perl) را تنظیم کنید تا قبل از هر درخواست دیباگر اتفاق بیفتد. یک چند
دستور line ممکن است با اسلش کردن خطوط جدید وارد شود.
< * تمام اقدامات دستور پرل را که از قبل درخواست کرده اند حذف کنید.
دستور << یک عمل (فرمان Perl) را اضافه کنید تا قبل از هر درخواست دیباگر اتفاق بیفتد. یک چند
دستور line ممکن است با بک واک کردن خطوط جدید وارد شود.
> اقدامات دستور Perl پس از اعلان را فهرست کنید.
> فرمان یک عمل (فرمان Perl) را تنظیم کنید تا بعد از اعلان زمانی که شما داده اید اتفاق بیفتد
دستوری برای بازگشت به اجرای اسکریپت. یک فرمان چند خطی ممکن است باشد
با اسلش کردن خطوط جدید وارد شده است (شرط میبندیم که نمیتوانستید این را حدس بزنید
اکنون).
> * تمام اقدامات دستور Perl پس از اعلان را حذف کنید.
>> فرمان یک عمل (فرمان Perl) را اضافه می کند تا بعد از اعلان زمانی که شما همین الان انجام دهید اتفاق بیفتد
دستور بازگشت به اجرای اسکریپت داده شد. یک فرمان چند خطی ممکن است
با اسلش کردن خطوط جدید وارد می شود.
{ دستورات دیباگر پیش از دستور را فهرست کنید.
{ [ فرمان ]
یک عمل (فرمان دیباگر) را تنظیم کنید تا قبل از هر درخواست دیباگر اتفاق بیفتد. آ
دستور چند خطی ممکن است به روش معمول وارد شود.
از آنجایی که این دستور از برخی جهات جدید است، در صورت ظاهر شدن اخطار داده می شود
به جای آن به طور تصادفی وارد یک بلوک شده باشد. اگر منظور شما این است که انجام دهید،
آن را مانند ";{ ... }" یا حتی "do { ... }" بنویسید.
{ * تمام دستورات دیباگر پیش از دستور را حذف کنید.
{{ دستور یک عمل (فرمان دیباگر) را اضافه کنید تا قبل از هر درخواست دیباگر اتفاق بیفتد. آ
دستور چند خطی ممکن است وارد شود، اگر می توانید حدس بزنید چگونه: بالا را ببینید.
! شماره یک دستور قبلی را دوباره انجام دهید (به طور پیش فرض به دستور قبلی می رسد).
! -number Redo number'امین دستور قبلی.
! الگو آخرین دستوری که با الگو شروع شد را دوباره انجام دهید. به "o recallCommand" نیز مراجعه کنید.
!! cmd cmd را در یک فرآیند فرعی اجرا کنید (از DB::IN خوانده می شود، به DB::OUT می نویسد) به "o" مراجعه کنید.
shellBang"، همچنین. توجه داشته باشید که پوسته فعلی کاربر (خوب، $ENV{SHELL} او
متغیر) استفاده خواهد شد که می تواند در تفسیر صحیح خروج اختلال ایجاد کند
وضعیت یا سیگنال و اطلاعات coredump.
فایل منبع خواندن و اجرای دستورات دیباگر از پرونده. پرونده ممکن است خود حاوی
دستورات "منبع".
H -number نمایش آخرین n دستور. فقط دستورات طولانی تر از یک کاراکتر لیست شده است.
If عدد حذف شده است، همه آنها را فهرست کنید.
q یا ^D ترک کنید. ("ترک" برای این کار نمی کند، مگر اینکه نام مستعار ایجاد کرده باشید) این همان است
تنها راه خروج از دیباگر را پشتیبانی میکند، هرچند ممکن است دو بار «خروج» را تایپ کنید
کار می کنند.
اگر می خواهید بتوانید از انتها خارج شوید، گزینه "inhibit_exit" را روی 0 قرار دهید
فیلمنامه همچنین ممکن است لازم باشد که $finished را روی 0 تنظیم کنید اگر می خواهید قدم بردارید
از طریق تخریب جهانی
R با اجرای یک جلسه جدید "exec()" دیباگر را مجددا راه اندازی کنید. ما سعی می کنیم شما را حفظ کنیم
سابقه در سراسر این، اما تنظیمات داخلی و گزینه های خط فرمان ممکن است
کم شده.
تنظیمات زیر در حال حاضر حفظ شده است: تاریخچه، نقاط شکست، اقدامات،
گزینه های دیباگر و گزینه های خط فرمان Perl -w, -Iو -e.
|dbcmd دستور دیباگر را اجرا کنید و DB::OUT را به پیجر فعلی خود وارد کنید.
||dbcmd همان "|dbcmd" است اما DB::OUT نیز به طور موقت "انتخاب" شده است.
= [مقدار مستعار]
یک دستور مستعار، like تعریف کنید
= ترک q
یا نام مستعار فعلی را فهرست کنید.
دستور دستور را به صورت دستور Perl اجرا کنید. یک نقطه ویرگول دنباله دار ارائه خواهد شد.
اگر دستور Perl در غیر این صورت برای یک دیباگر Perl اشتباه گرفته می شود، از a استفاده کنید
نقطه ویرگول پیشرو نیز.
m expr فهرستی از متدهایی که ممکن است در نتیجه عبارت ارزیابی شده فراخوانی شوند.
این عبارت ممکن است به ارجاع به یک شیء مبارک یا به الف ارزیابی شود
نام بسته.
M نمایش تمام ماژول های بارگذاری شده و نسخه های آنها.
مرد [manpage]
علیرغم نامش، این نمایشگر اسناد پیش فرض سیستم شما را بر روی صفحه فراخوانی می کند
صفحه داده شده، یا در خود بیننده اگر صفحه مدیریت حذف شده است. اگر آن بیننده است
مرد، از اطلاعات فعلی "Config" برای فراخوانی استفاده می شود مرد با استفاده از مناسب
MANPATH یا -M مانت گزینه. جستجوی ناموفق از فرم "XXX" که مطابقت دارد
صفحات مدیریتی شناخته شده فرم perlXXX دوباره امتحان خواهد شد. این به شما امکان می دهد تایپ کنید "man
اشکال زدایی" یا "man op" از دیباگر.
در سیستمهایی که بهطور سنتی فاقد قابلیت استفاده هستند مرد دستور، دیباگر فراخوانی می کند
perldoc. گاهی اوقات این تعیین به دلیل سرکشی نادرست است
فروشندگان یا به عبارت بهتر، به کاربران مبتکر. اگر در افتادید
در هر دسته، فقط به صورت دستی متغیر $DB::doccmd را روی هر بیننده ای تنظیم کنید
برای مشاهده اسناد پرل در سیستم خود. این ممکن است در یک فایل rc تنظیم شود،
یا از طریق واگذاری مستقیم ما هنوز منتظر یک نمونه کار هستیم
چیزی در این راستا:
$DB::doccmd = 'netscape -remote http://something.here/';
تنظیم گزینه
دیباگر دارای گزینه های متعددی است که با استفاده از دستور "o" قابل تنظیم هستند، چه به صورت تعاملی و چه به صورت تعاملی
از محیط یا یک فایل rc. (./.perldb یا ~/.perldb تحت یونیکس.)
"RecalCommand"، "ShellBang"
کاراکترهایی که برای یادآوری یک فرمان یا ایجاد یک پوسته استفاده می شوند. به طور پیش فرض، هر دو
روی "!" تنظیم شده اند که مایه تاسف است.
برنامه "پیجر" برای استفاده برای خروجی دستورات پیجر (آنهایی که با "|" شروع می شوند.
نویسه.) به طور پیش فرض، $ENV{PAGER} استفاده خواهد شد. زیرا دیباگر استفاده می کند
در صورت انتخاب، مشخصه های ترمینال فعلی شما برای پررنگ و خط کشی
پیجر توالی های فرار را بدون تغییر، خروجی برخی، عبور نمی دهد
هنگام ارسال از طریق پیجر، دستورات دیباگر قابل خواندن نخواهند بود.
"tkRunning" هنگام درخواست Tk را اجرا کنید (با ReadLine).
"signalLevel"، "warnLevel"، "dieLevel"
سطح پرحرفی. به طور پیش فرض، دیباگر استثناهای شما را ترک می کند و
هشدارها به تنهایی، زیرا تغییر آنها می تواند برنامه های در حال اجرا را به درستی خراب کند.
هنگامی که سیگنال های INT، BUS، یا SEGV کشف نشد، سعی می کند پیامی را چاپ کند
رسیدن (اما ذکر سیگنال در "BUGS" را در زیر ببینید.)
برای غیرفعال کردن این حالت ایمن پیشفرض، این مقادیر را روی چیزی بالاتر از آن تنظیم کنید
0. در سطح 1، با دریافت هر نوع اخطاری، بک تریکس دریافت می کنید
(این اغلب آزار دهنده است) یا استثنا (این اغلب ارزشمند است).
متأسفانه، دیباگر نمی تواند استثناهای کشنده را از غیر کشنده تشخیص دهد
آنهایی که اگر "dieLevel" حتی 1 باشد، استثناهای غیر کشنده شما نیز ردیابی می شوند
و بدون تشریفات اگر از رشتههای «اورال» یا از رشتههای دیگری آمده باشند، تغییر میکنند
نوعی "eval" در ماژول هایی که می خواهید بارگذاری کنید. اگر "dieLevel" 2 باشد،
اشکال زدا اهمیتی نمی دهد که از کجا آمده اند: این استثنای شما را غصب می کند
کنترل کننده و یک ردیابی را چاپ می کند، سپس همه استثناها را با خود تغییر می دهد
تزیینات این شاید برای برخی اهداف ردیابی مفید باشد، اما
تمایل دارد به طور ناامیدکننده ای هر برنامه ای را که مدیریت استثنای خود را انجام می دهد، نابود کند
gravement.
حالت Trace "AutoTrace" (شبیه به دستور "t"، اما می توان آن را در "PERLDB_OPTS" قرار داد).
"LineInfo" فایل یا لوله برای چاپ اطلاعات شماره خط. اگر لوله است (مثلاً
"|visual_perl_db")، سپس یک پیام کوتاه استفاده می شود. این مکانیزم استفاده شده است
برای تعامل با یک ویرایشگر برده یا دیباگر بصری، مانند "vi" ویژه
یا قلاب های "emacs" یا اشکال زدای گرافیکی "ddd".
"inhibit_exit"
اگر 0، اجازه می دهد قدم زدن خاموش پایان فیلمنامه
"PrintRet" در صورت تنظیم (پیش فرض) مقدار بازگشتی را بعد از دستور "r" چاپ کنید.
"زیور آلات" بر ظاهر صفحه نمایش خط فرمان تأثیر می گذارد (به عبارت::ReadLine مراجعه کنید). وجود دارد
در حال حاضر راهی برای غیرفعال کردن این موارد وجود ندارد، زیرا می تواند برخی از خروجی ها را ناخوانا کند
برخی از نمایشگرها یا با برخی پیجرها. این یک اشکال در نظر گرفته می شود.
"frame" بر چاپ پیام ها هنگام ورود و خروج از برنامه های فرعی تأثیر می گذارد. اگر
"frame & 2" نادرست است، پیام ها فقط در هنگام ورود چاپ می شوند. (چاپ در خروجی
اگر با پیامهای دیگر آمیخته شود، ممکن است مفید باشد.)
اگر "frame & 4"، آرگومان های توابع، به علاوه زمینه و تماس گیرنده چاپ می شوند
اطلاعات اگر "frame & 8"، "stringify" بیش از حد بارگذاری شده و "Tie"d "FETCH" فعال باشد در
آرگومان های چاپ شده اگر «frame & 16» باشد، مقدار برگردانده شده از زیربرنامه
چاپ می شود.
طولی که لیست آرگومان کوتاه می شود توسط بعدی کنترل می شود
گزینه:
"maxTraceLen"
طول کوتاه کردن لیست آرگومان هنگامی که بیت 4 گزینه "frame" تنظیم شده است.
"اندازه پنجره"
اندازه پنجره لیست کد را تغییر دهید (پیش فرض 10 خط است).
گزینه های زیر بر آنچه با دستورات "V"، "X" و "x" اتفاق می افتد تأثیر می گذارد:
"ArrayDepth"، "HashDepth"
فقط اولین عنصر N را چاپ کنید ('' برای همه).
"dumpDepth" عمق بازگشت به N را در هنگام تخلیه سازه ها محدود کنید. ارزش های منفی
به بی نهایت تعبیر می شوند. پیش فرض: بی نهایت.
"compactDump"، "veryCompact"
سبک آرایه و خروجی هش را تغییر دهید. اگر "compactDump"، آرایه کوتاه ممکن است
در یک خط چاپ شود
"globPrint" آیا برای چاپ محتوای globs.
"DumpDBFiles"
آرایههایی را که فایلهای اشکال زدایی را در خود نگه میدارند، تخلیه کنید.
"بسته های دامپ"
جداول نماد بسته ها را تخلیه کنید.
"DumpReused"
محتویات آدرس های "استفاده مجدد" را تخلیه کنید.
"نقل قول"، "HighBit"، "undefPrint"
سبک دامپ رشته را تغییر دهید. مقدار پیش فرض برای "quote" "auto" است. یکی
می تواند با قرار دادن آن بر روی """ یا فرمت دو quotish یا single-quotish را فعال کند
"'"، به ترتیب. به طور پیش فرض، کاراکترهایی با مجموعه بیت بالا چاپ می شوند
کلمه به کلمه
"UsageOnly" ابتدایی استفاده از حافظه در هر بسته. اندازه کل رشته ها را محاسبه می کند
در متغیرهای بسته یافت می شود. این شامل واژگان در الف نمی شود
دامنه فایل ماژول، یا در بسته شدن گم شده است.
"HistFile" مسیر فایلی که از آن تاریخچه (با فرض یک عبارت قابل استفاده::ReadLine)
backend) در راه اندازی دیباگر خوانده می شود و در آن ذخیره می شود
در حالت خاموش شدن (برای تداوم در تمام جلسات). از نظر مفهوم شبیه به Bash است
فایل ".bash_history".
"HistSize" تعداد خطوط ذخیره شده در تاریخچه (با فرض "HistFile" در بالا).
پس از خواندن فایل rc، دیباگر متغیر محیطی $ENV{PERLDB_OPTS} را می خواند.
و این را به عنوان باقیمانده یک خط "O ..." تجزیه می کند که ممکن است در اشکال زدا وارد شود
سریع. می توانید گزینه های مقداردهی اولیه "TTY"، "noTTY"، "ReadLine" و
"بدون توقف" وجود دارد.
اگر فایل rc شما حاوی:
parse_options("NonStop=1 LineInfo=db.out AutoTrace");
سپس اسکریپت شما بدون دخالت انسان اجرا می شود و اطلاعات ردیابی را در آن قرار می دهد
پرونده db.out. (اگر آن را قطع کنید، بهتر است "LineInfo" را به حالت اولیه بازنشانی کنید /dev/tty اگر شما
انتظار دیدن هر چیزی را داشته باشید.)
"TTY" TTY مورد استفاده برای اشکال زدایی I/O.
"noTTY" در صورت تنظیم، دیباگر به حالت "NonStop" می رود و به TTY متصل نمی شود.
اگر قطع شود (یا اگر کنترل از طریق تنظیم صریح به دیباگر برود
$DB::signal یا $DB::single از اسکریپت Perl)، به یک TTY متصل می شود.
مشخص شده در گزینه "TTY" در هنگام راه اندازی، یا به tty که در زمان اجرا با استفاده از آن یافت می شود
ماژول "Term::Rendezvous" به انتخاب شما.
این ماژول باید متدی به نام "new" را پیاده سازی کند که یک شی را با آن برمی گرداند
دو روش: "IN" و "OUT". اینها باید filehandles را برای استفاده برگردانند
اشکال زدایی ورودی و خروجی به ترتیب. روش "جدید" باید بازرسی شود
یک آرگومان حاوی مقدار $ENV{PERLDB_NOTTY} هنگام راهاندازی، یا
"$ENV{HOME}/.perldbtty$$" در غیر این صورت. این فایل از نظر صحیح بررسی نشده است
مالکیت، بنابراین خطرات امنیتی از نظر تئوری ممکن است.
"ReadLine" در صورت نادرست بودن، پشتیبانی از خط خواندن در دیباگر برای رفع اشکال غیرفعال می شود.
برنامه هایی که خودشان از ReadLine استفاده می کنند.
"NonStop" اگر تنظیم شود، اشکال زدا به حالت غیر تعاملی می رود تا زمانی که قطع شود، یا
به صورت برنامه ریزی شده با تنظیم $DB::signal یا $DB::single.
در اینجا مثالی از استفاده از متغیر $ENV{PERLDB_OPTS} آورده شده است:
$ PERLDB_OPTS="NonStop frame=2" perl -d myprogram
که اسکریپت را اجرا می کند برنامه من بدون دخالت انسان، چاپ درخت فراخوان
با نقاط ورود و خروج توجه داشته باشید که "NonStop=1 فریم=2" معادل "N f=2" است و
که در اصل، گزینهها را میتوان به طور منحصربهفرد با حرف اول مخفف کرد (modulo the
گزینه های "دومپ*"). با این وجود توصیه می شود که همیشه آنها را به طور کامل بیان کنید
برای خوانایی و سازگاری در آینده
مثالهای دیگر شامل این موارد است
$ PERLDB_OPTS="NonStop LineInfo=listing frame=2" perl -d myprogram
که اسکریپت را به صورت غیر تعاملی اجرا می کند، اطلاعات مربوط به هر ورودی را در یک زیر روال چاپ می کند و
هر خط اجرا شده در فایل نامگذاری شده فهرست. (اگر آن را قطع کنید، بهتر است
"LineInfo" را به چیزی "تعاملی" بازنشانی کنید!)
نمونه های دیگر عبارتند از (استفاده از نحو استاندارد پوسته برای نشان دادن متغیر محیطی
تنظیمات):
$ ( PERLDB_OPTS="NonStop frame=1 AutoTrace LineInfo=tperl.out"
perl-d myprogram )
که ممکن است برای اشکال زدایی برنامه ای که از خود "Term::ReadLine" استفاده می کند مفید باشد. انجام ندهید
فراموش کنید که پوسته خود را از TTY در پنجره مربوطه جدا کنید /dev/ttyXX,
می گویند، با صدور دستوری مانند
خواب 1000000 دلار
برای جزئیات بیشتر به "Internals Debugger" در perldebguts مراجعه کنید.
اشکالزدا ورودی خروجی
درخواست اعلان دیباگر چیزی شبیه به این است
DB<8>
و یا حتی
DB<<17>>
جایی که آن عدد، شماره فرمان است، و برای دسترسی به آن از آن استفاده می کنید
ساخته شده در cshمکانیسم مانند تاریخ به عنوان مثال، "!17" دستور را تکرار می کند
شماره 17. عمق براکت های زاویه نشان دهنده عمق تودرتو است
اشکال زدا. برای مثال، اگر میخواهید، میتوانید بیش از یک مجموعه براکت دریافت کنید
در حال حاضر در یک نقطه شکست و سپس نتیجه یک فراخوانی تابع که خود چاپ شده است
دارای نقطه شکست است یا از طریق دستور "s/n/t express" وارد یک عبارت می شوید.
دستورات چند خطی
اگر می خواهید یک فرمان چند خطی مانند تعریف زیربرنامه با
چندین عبارت یا یک قالب، از خط جدیدی که معمولاً به پایان می رسد، فرار کنید
دستور دیباگر با بک اسلش. در اینجا یک مثال است:
DB<1> برای (1..4) { \
ادامه: چاپ "ok\n"؛ \
ادامه: }
ok
ok
ok
ok
توجه داشته باشید که این تجارت فرار از خط جدید مخصوص دستورات تعاملی است
در دیباگر تایپ شده است.
پشته پشته
در اینجا مثالی از نحوه ظاهر پشته پشته از طریق دستور "T" آورده شده است:
$ = main::infested از فایل "Ambulation.pm" خط 10 نامیده می شود
@ = Ambulation::legs(1, 2, 3, 4) از فایل 'camel_flea' خط 7 نامیده می شود
$ = main::pests ('bactrian', 4) از فایل 'camel_flea' خط 4 نامیده می شود
کاراکتر سمت چپ در بالا نشان دهنده زمینه ای است که تابع در آن قرار داشته است
نامیده می شود، با "$" و "@" به ترتیب به معنای اسکالر یا زمینه های فهرست، و "."
به معنای بافت خالی (که در واقع نوعی بافت اسکالر است). نمایشگر
در بالا می گوید که هنگام اجرای پشته در تابع "main::infested" بودید
dump، و اینکه در زمینه اسکالر از خط 10 فایل فراخوانی شده است
Ambulation.pm، اما اصلاً بدون هیچ استدلالی، یعنی به عنوان نامیده می شد
&آلوده. قاب پشته بعدی نشان می دهد که تابع "Ambulation::legs" بوده است
فراخوانی شده در متن فهرست از شتر_کک فایل با چهار آرگومان آخرین
stack frame نشان می دهد که "main::pests" در زمینه اسکالر، همچنین از فراخوانی شده است
شتر_کک، اما از خط 4.
اگر دستور "T" را از داخل یک عبارت "use" فعال اجرا کنید،
Backtrace شامل هر دو فریم "require" و "eval" است.
قالب لیست خط
این نوع خروجی هایی را که فرمان "l" می تواند تولید کند را نشان می دهد:
DB<<13>> l
101: @i{@i} = ();
102:b @isa{@i,$pack} = ()
103 if($i{$prevpack} || وجود دارد $isa{$pack});
104}
105
106 بعدی
107==> if(exists $isa{$pack});
108
109:a if ($extra-- > 0) {
110: %isa = ($pack,1);
خطوط شکستنی با ":" مشخص می شوند. خطوط با نقطه شکست با "b" و مشخص می شوند
کسانی که با "الف" عمل می کنند. خطی که قرار است اجرا شود با علامت گذاری شده است
"==>".
لطفاً توجه داشته باشید که ممکن است کد موجود در فهرستهای دیباگر شبیه شما نباشد
کد منبع اصلی دستورالعمل های خط و فیلترهای منبع خارجی می توانند این را تغییر دهند
کد قبل از اینکه پرل آن را ببیند، باعث می شود کد از موقعیت اصلی خود حرکت کند یا بگیرد
در اشکال کاملا متفاوت
فهرست قاب
هنگامی که گزینه "frame" تنظیم می شود، دیباگر وارد شده (و به صورت اختیاری) را چاپ می کند
خروجی) زیر برنامه ها در سبک های مختلف. perldebguts را برای مدت بسیار طولانی ببینید
نمونه هایی از اینها
اشکال زدایی کامپایل-زمان بیانیه
اگر دستورات اجرایی در زمان کامپایل دارید (مانند کد در BEGIN، UNITCHECK و
بلوکها یا عبارتهای «استفاده» را بررسی کنید)، اینها خواهند شد نه اگرچه توسط دیباگر متوقف شود
بلوکهای «نیاز» و INIT میشوند و دستورات زمان کامپایل را میتوان با آن ردیابی کرد
گزینه "AutoTrace" در "PERLDB_OPTS" تنظیم شده است). با این حال، از کد پرل خودتان می توانید
با استفاده از عبارت زیر کنترل را به دیباگر بازگردانید، که اگر بی ضرر است
دیباگر اجرا نمی شود:
$DB::single = 1;
اگر $DB::single را روی 2 تنظیم کنید، معادل این است که فقط دستور "n" را تایپ کرده باشید، در حالی که
مقدار 1 به معنای دستور "s" است. متغیر $DB::trace باید روی 1 تا تنظیم شود
با تایپ دستور "t" شبیه سازی کنید.
راه دیگر برای اشکال زدایی کدهای زمان کامپایل این است که دیباگر را راه اندازی کنید، یک نقطه انفصال روی آن تنظیم کنید
بار برخی از ماژول ها:
DB<7> b load f:/perllib/lib/Carp.pm
در بارگذاری «f:/perllib/lib/Carp.pm» متوقف خواهد شد.
و سپس با استفاده از دستور "R" (در صورت امکان) دیباگر را مجددا راه اندازی کنید. می توان از b compile استفاده کرد
نام فرعی" برای همین منظور.
اشکالزدا سفارشی سازی
اشکالزدا احتمالاً دارای قلابهای پیکربندی کافی است که هرگز مجبور نخواهید شد
خودت اصلاحش کن شما می توانید رفتار دیباگر را از داخل دیباگر تغییر دهید
با استفاده از دستور "o" آن، از خط فرمان از طریق متغیر محیطی "PERLDB_OPTS"،
و از فایل های سفارشی سازی.
می توانید با تنظیم a مقداری سفارشی سازی انجام دهید .perldb فایلی که حاوی مقداردهی اولیه است
کد به عنوان مثال، می توانید نام مستعارهایی مانند این بسازید (آخری مورد انتظار مردم است
آنجا بودن):
$DB:: مستعار{'len'} = 's/^len(.*)/p length($1)/';
$DB::alias{'stop'} = 's/^stop (at|in)/b/';
$DB:: مستعار{'ps'} = 's/^ps\b/p اسکالر /';
$DB:: مستعار{'quit'} = 's/^quit(\s*)/exit/';
می توانید گزینه ها را تغییر دهید .perldb با استفاده از تماس هایی مانند این؛
parse_options("NonStop=1 LineInfo=db.out AutoTrace=1 فریم=2");
کد در بسته "DB" اجرا می شود. توجه داشته باشید که .perldb قبل پردازش می شود
پردازش "PERLDB_OPTS". اگر .perldb زیربرنامه "afterinit" را تعریف می کند، که تابع است
پس از پایان اولیه سازی دیباگر فراخوانی می شود. .perldb ممکن است در جریان موجود باشد
دایرکتوری یا در فهرست اصلی. زیرا منبع این فایل توسط Perl و May می باشد
حاوی دستورات دلخواه باشد، به دلایل امنیتی، باید متعلق به ابرکاربر یا کاربر باشد
کاربر فعلی، و توسط هیچ کس جز صاحب آن قابل نوشتن نیست.
میتوانید با افزودن دستورات دلخواه به @DB::typeahead، ورودی TTY را به اشکالزدا مسخره کنید. برای
به عنوان مثال، شما .perldb فایل ممکن است حاوی:
sub afterinit { push @DB::typeahead, "b 4", "b 6"; }
که سعی می کند بلافاصله پس از دیباگر، نقاط شکست را در خطوط 4 و 6 تنظیم کند
مقداردهی اولیه. توجه داشته باشید که @DB::typeahead یک رابط پشتیبانی نشده است و مشمول آن است
تغییر در نسخه های آینده
اگر می خواهید دیباگر را اصلاح کنید، کپی کنید perl5db.pl از کتابخانه پرل به نام دیگری
و آن را تا ته دل هک کنید. سپس می خواهید محیط "PERL5DB" خود را تنظیم کنید
متغیر برای گفتن چیزی شبیه به این:
BEGIN { نیازمند "myperl5db.pl" }
به عنوان آخرین راه حل، شما همچنین می توانید از "PERL5DB" برای سفارشی کردن دیباگر به طور مستقیم استفاده کنید
تنظیم متغیرهای داخلی یا فراخوانی توابع دیباگر.
توجه داشته باشید که هر متغیر و تابعی که در این سند (یا در
perldebguts) فقط برای استفاده داخلی در نظر گرفته می شوند و به این ترتیب ممکن است تغییر کنند
بدون اطلاع قبلی
خط خواندنی پشتیبــانی / تاریخچه in la اشکالزدا
همانطور که حمل می شود، تنها تاریخچه خط فرمان ارائه شده یک تاریخچه ساده است که بررسی می کند
علامت تعجب پیشرو با این حال، اگر Term::ReadKey و Term::ReadLine را نصب کنید
ماژول هایی از CPAN (مانند Term::ReadLine::Gnu، Term::ReadLine::Perl، ...) خواهید داشت
قابلیت های کامل ویرایش بسیار شبیه به گنو خط خواندن(3) فراهم می کند. به دنبال اینها در
ماژول ها / توسط ماژول / مدت دایرکتوری در CPAN اینها نرمال را پشتیبانی نمی کنند vi خط فرمان
با این حال ویرایش
یک تکمیل خط فرمان ابتدایی نیز در دسترس است، از جمله متغیرهای واژگانی در
محدوده فعلی اگر ماژول "PadWalker" نصب شده باشد.
بدون پشتیبانی Readline، ممکن است نمادهای "^[[A"، "^[[C"، "^[[B"، "^[[D"، "^H" را مشاهده کنید.
... هنگام استفاده از کلیدهای جهت دار و/یا کلید backspace.
ویرایشگر پشتیبــانی برای اشکال زدایی
اگر نسخه گنو را دارید ایمکس بر روی سیستم شما نصب شده است، می تواند با آن تعامل داشته باشد
اشکال زدایی پرل برای ارائه یک محیط توسعه نرم افزار یکپارچه که یادآور آن است
تعامل با دیباگرهای C
نسخه های اخیر Emacs با یک فایل شروع برای ساخت همراه است ایمکس مانند یک نحو عمل کنید-
ویرایشگر هدایت شده که (برخی از) نحو پرل را درک می کند. به perlfaq3 مراجعه کنید.
کاربران از vi نیز باید بررسی شود نیرو و گویم، نسخه موشی و بادگیر، برای رنگ آمیزی
از کلمات کلیدی پرل
توجه داشته باشید که فقط پرل میتواند پرل را بهطور واقعی تجزیه کند، بنابراین همه ابزارهای CASE تا حدودی کمتر از آن هستند
علامت، به خصوص اگر شما Perl خود را به عنوان یک برنامه نویس C برنامه ریزی نکنید.
La پرل پروفیلر
اگر میخواهید یک اشکالزدای جایگزین برای اجرای Perl تهیه کنید، اسکریپت خود را با a فراخوانی کنید
کولون و یک آرگومان بسته به -d پرچم. اشکال زدای جایگزین پرل عبارتند از a
پروفایلر پرل، Devel::NYTProf، که به صورت جداگانه به عنوان یک توزیع CPAN در دسترس است. به
پروفایل برنامه پرل خود را در فایل mycode.pl، فقط تایپ کنید:
$ perl -d:NYTProf mycode.pl
هنگامی که اسکریپت پایان می یابد، نمایه ساز یک پایگاه داده از اطلاعات نمایه ایجاد می کند
که می توانید با استفاده از ابزارهای پروفایلر به گزارش تبدیل کنید. دیدن برای جزئیات
اشکال زدایی منظم عبارات
"use re 'debug'" شما را قادر می سازد تا جزئیات بد نحوه بیان منظم Perl را ببینید
موتور کار می کند برای درک این خروجی معمولاً حجیم، نه تنها باید
در مورد نحوه عملکرد تطبیق عبارت منظم به طور کلی ایده ای داشته باشید، اما همچنین می دانید که چگونه
عبارات منظم پرل به صورت داخلی در یک خودکار کامپایل می شوند. این مسائل هستند
با جزئیات در «اشکالزدایی عبارات با قاعده» در perldebguts بررسی شده است.
اشکال زدایی حافظه استفاده
Perl دارای پشتیبانی داخلی برای گزارش استفاده از حافظه خود است، اما این نسبتاً خوب است
مفهوم پیشرفته ای که نیاز به درک درستی از نحوه عملکرد تخصیص حافظه دارد. دیدن
"اشکال زدایی استفاده از حافظه پرل" در perldebguts برای جزئیات.
با استفاده از خدمات onworks.net از perldbug به صورت آنلاین استفاده کنید