2016-03-18 125 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

这不是完整的答案,所以我不接受它。我正在处理我的自定义调试器。完成之后,我也会完成这个答案。 –