2015-05-09 50 views
0

我有一个ruby脚本,显然是正确的,有时停止工作(可能在通过pg gem对Postgresql的某些调用中)。问题在于它冻结但不会产生任何错误,所以我看不到行号,我总是必须使用puts "ok1",puts "ok2"等来隔离行,并查看脚本停止的位置。查看当前正在执行的ruby脚本

有没有更好的方法来看到正在执行的当前行(不更改脚本)?也许目前的堆栈?

回答

1

你可以调查ruby-debug一个项目,已经几次改写几个不同版本的ruby,应该允许你逐行浏览你的代码。不过,我个人更喜欢printf调试。另外,如果我必须对您的问题进行绝对随机猜测,那么我可能会调查您是否遇到了数据库中的竞争条件和/或死锁。

+0

我已经考虑过'ruby-debug',但不幸的是,在脚本运行时无法看到正在执行的当前行。唯一的办法是在某处设置一个断点,但这不是我想要的。我只是想运行脚本,并在某个时间打印正在执行的当前行,不管它是什么。 – collimarco

+1

我即将提出的是可怕的,但绝望的时代和所有这些...以下是一些组合:http://stackoverflow.com/a/3236342/3277393和http://stackoverflow.com/ a/12175847/3277393。你可以在每个方法调用中创建一个钩子(因为ruby中的几乎所有东西都是方法调用)并在开始执行时打印行号。由于这就像从消防水带喝水一样,您也可以考虑过滤输出以仅显示您感兴趣的源文件中的行号。 – user12341234