是否可以在不修改源的情况下在Perl调试器中设置断点?

时间:2011-01-16 07:29:32

标签: perl debugging

我正在通过其他人的代码来查找在某个特定的,不可测试的情况下破坏我的代码(不要问我为什么测试框架会给出不同的实际使用结果,这就是我想要弄清楚的)情况。每次我在崩溃之前进一步深入代码时,有没有什么办法可以在不修改源代码的情况下设置断点?所以我没有下一步,下一步,下一步,下一次,每一次?或每次修改源。还要考虑到我必须逐步浏览多个文件,因为这些程序广泛使用了库,并且bug本身似乎位于其中一个库中。所以例如我知道我需要继续执行,直到我达到文件的行号。这些库也在加载库,我检查的最后一个库至少有3-5个库。

注意:我是一般的调试人员

2 个答案:

答案 0 :(得分:6)

听起来您需要交互式Perl调试器中的b命令,该命令可用于设置将来的断点。或者也许是c命令,如果给出一个参数,它就像GDB的until一样。

每次使用.perldb中的afterinit启动调试器时,您也可以自动设置某些断点。或者使用R命令重启调试器(以及正在调试的程序),同时保留断点和其他信息。

答案 1 :(得分:3)

您可以结合使用 b 命令, f 命令,%INC 的内容以及 c 命令快速浏览代码。

c 可让您继续执行,直至到达指定的行。这使您可以轻松地跳转到任意点。

如果您想在模块中的某个特定位置中断,请在%INC 中查看该模块的条目(该键将为'Some / Module.pm'如果模块是 Some :: Module )。该键的值是从中加载模块的文件。如果尚未加载模块,您可以在调试器的命令提示符下使用,然后查看%INC

如果您的文件包含要设置断点的代码,请执行 f filename 以切换调试器的 l (列表)和文本搜索命令( / - 分别向前和向后)查看该文件,然后设置所需的断点, c 即可到达。< / p>