2016-03-18 165 views
4

我寫了一個自定義調試器,如perldebguts中所述。但是,我的調試程序代碼有問題,所以我想逐行查看我的DB::DB()DB::sub()例程以找出問題。如何調試自定義調試器?

我想我可以通過設置$^D1<<30做到這一點,因爲documentation說:

當你的程序的執行到達可容納一個斷點一個點,DB::DB()子程序被稱爲如果任何變量$DB::trace,$DB::single$DB::signal爲真。這些變量不可本地化。在DB::DB()內執行時,此功能被禁用,包括從中調用的函數,除非$^D & (1<<30)爲真。

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

(強調)表示,對IRC#Perl的幫助渠道

人與$^D & (1<<30)我也許能調試我的調試器,但他們不知道任何細節。

如何跟蹤我的DB::DB()DB::sub()子例程的執行?

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

+1

你嘗試過什麼?在不瞭解你想要做什麼的更多細節的情況下,這裏似乎並沒有真正的問題。 –

+1

你能說清楚「debug the debugger」是什麼意思嗎?您是否嘗試調試您編寫的自定義調試器?你能舉一個具體的例子嗎? – ThisSuitIsBlackNot

+0

@ThisSuitIsBlackNot,是的,我正在嘗試調試一個客戶調試器。 –

回答

1

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

當我從調試器$^D|=(1<<30)運行該表達式並運行調試器命令(如vars 2 $x)後,這將允許我調試從DB :: namespace調用的代碼。 DB :: DB內)執行(包括函數從它叫做除非$^D & (1<<30)是真的

這句話從DOC只是使混亂的時候

禁用此功能。
該功能是不是在內部執行DB::DB()時被禁用,除非$^D & (1<<30)爲真。
此功能僅被禁止從DB::DB()時調用的函數$^D & (1<<30)是真的

+0

請使用您問題上的編輯鏈接添加其他信息。後回答按鈕應該只用於問題的完整答案。 - [來自評論](/ review/low-quality-posts/13327349) – lokusking

+0

這不是完整的答案,所以我不接受它。我正在處理我的自定義調試器。完成之後,我也會完成這個答案。 –