簡體   English   中英

如何調試自定義調試器?

[英]How can I debug a custom debugger?

我編寫了一個自定義調試器,如perldebguts中所述 但是我的調試器代碼有問題,所以我想逐行遍歷我的DB::DB()DB::sub()例程來隔離問題。

我想我可以通過將$^D設置$^D 1<<30來實現這一點,因為文檔說:

當程序的執行到達可以保存斷點的點時,如果任何變量$DB::trace$DB::single$DB::signal為true,則調用DB::DB()子例程。 這些變量不可本地化。 DB::DB()內執行時禁用此功能,包括從中調用的函數, 除非$^D & (1<<30)為真。

當程序執行到達子程序調用時,調用&DB::sub (args)代替, $DB::sub保存被調用子程序的名稱。 (如果子程序是在DB包中編譯的,則不會發生這種情況。)

(重點補充)

IRC#perl-help頻道的人說用$^D & (1<<30)我可以調試我的調試器,但除此之外他們不知道任何細節。

如何逐步跟蹤DB::DB()DB::sub()子例程的執行情況?

UPD根據下面的答案。 當設置$^D |= (1<<30)標志時,這允許我調試在DB命名空間之外定義的調試器命令,但這不是問題的答案: 如何在DB :: DB內執行時禁用該功能?

這是我想要調試的自定義調試器Devel :: DebugHooks

當我從調試器$^D|=(1<<30)運行這個表達式,之后運行調試器命令,比如vars 2 $x ,這將允許我調試從DB :: namespace調用的代碼。

在DB :: DB()內部執行時禁用此功能,包括從中調用的函數,除非$^D & (1<<30)為真

來自DOC的這句話只會令人困惑。
除非$^D & (1<<30)為真,否則在DB::DB()內執行時不會禁用該功能。
$^D & (1<<30)為真時,僅對從DB::DB()調用的函數禁用此功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM