您在谈论“跟踪”功能。
一些语言,如 shell 和 good-ol' GWBasic,有一个标志来显示它们当前正在执行的行。Ruby 的$DEBUG
输出可能会使您充满信息过载,而不是来自您的代码,而是来自任何寻找它并转储其当前状态或打开其跟踪的 gem。
许多人在他们的代码中撒上一些代码,puts
以便在他们的开发/测试过程中显示他们所处的位置。如果您这样做,我建议您将其编写为一种限制输出并让您轻松打开/关闭它的方法。此外,使用标志来检查您是否要调试。您甚至可能希望使用 OptionParser 让您创建一个--debug
标志以在命令行上传递。使用方法的另一个很好的副作用是很容易将输出重定向到一个文件,tail
并在输出发生时观察它,然后用于分类。
另一种选择是将代码加载到调试器中并告诉它进行跟踪。你会看到代码的每一步,非常冗长,但细节很好。您还可以告诉它运行到某些点,以便您可以戳代码并四处挖掘,如果需要,可以放入 IRB。
就我个人而言,我是老派并且对汇编语言有所了解,我对调试器很满意,所以我经常使用 Ruby。告诉它运行到某个位置并停止很容易,或者您可以嵌入include 'debugger'; debugger
到您的代码中,它会在该点停止。一旦到了那里,就可以看到发生了什么,然后c
继续,让程序运行,直到它debugger
再次命中语句。我发现调试器非常强大,并且在我想知道发生了什么的时候是一个很好的选择性放大镜。
“ Ruby 中的调试” 有很多不错的技巧,您可能会发现它们也很有用。
编辑:
我喜欢 Alex D 建议研究 Ruby 的set_trace_func
. 我没有使用过它(坦率地说,我忘了它),但这是在应用程序中设置良好跟踪的好方法。使用一些代码,您可以设置打开/关闭它并有选择地输出给定的特定类或条件,因为您可以控制proc
被调用。