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