[英]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.