调试Perl代码(在命令行debbugger中perl -d)的一个令人痛苦的事实是,错误地打印(通过x命令)大型数据结构的内容可以保证终端冻结一半半而数百页的数据印刷.特别是如果这种情况发生在缓慢的网络中.
因此,我希望能够限制x打印的数据量.
我看到两种方法 - 如果有人知道怎么做,我愿意尝试.
限制调试器中任何单个命令打印的数据量.
更好的是,以某种方式用x自定义Perl方法替换内置命令(它将计算数据结构的"大小",并拒绝打印其内容而无需确认).
我特别问"如何x用自定义代码替换" - 构建一个足够好的"数据结构太大"Perl方法是我可以自己做的事情而不需要太多的努力,虽然我看到足够的陷阱阻止"完美"一个来自相当令人沮丧的努力.哎呀,只是做Data :: Dumper-> Dump并获取字符串的长度可能会诀窍:)
请注意,我非常清楚如何通过递归检查数据结构层来手动避免这个问题(例如打印ref,打印键/数组元素的数量等等)......整点都是我希望能够x $huge_pile_of_data不假思索地避免不假思索地打字- 或者在将大量数据填充到应该是标量的错误上磕磕绊绊.
Mic*_*man 14
该x命令采用可选参数显示最大深度.这与将数据量限制为N页不完全相同,但它对于防止过载非常有用.
DB<1> %h = (a => { b => { c => 1 } } )
DB<2> x %h
0 'a'
1 HASH(0x1d5ff44)
'b' => HASH(0x1d61424)
'c' => 1
DB<3> x 2 %h
0 'a'
1 HASH(0x1d5ff44)
'b' => HASH(0x1d61424)
Run Code Online (Sandbox Code Playgroud)
您可以通过o命令指定要打印的默认深度,例如
DB<1>o dumpDepth=1
Run Code Online (Sandbox Code Playgroud)
将其添加到您的.perldb文件以将其应用于所有调试器会话.
否则,它看起来像x命令调用DB::dumpit()它只是一个包装器dumpval.pl(或者更具体地说,main::dumpValue()它定义的子包).您可以根据需要修改/替换该脚本.不过,我不确定你是如何让它互动的.