【问题标题】:See the current line being executed of a ruby script查看正在执行的 ruby​​ 脚本的当前行
【发布时间】:2015-05-09 10:37:15
【问题描述】:

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

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

【问题讨论】:

    标签: ruby debugging


    【解决方案1】:

    您可以调查ruby-debug 一个项目,该项目已经为多个不同版本的 ruby​​ 重写了多次,应该允许您逐行执行代码。在很多情况下,我个人更喜欢 printf 调试。此外,如果我必须对您的问题进行绝对随机的猜测,我可能会调查您是否在数据库中遇到了争用条件和/或死锁。

    【讨论】:

    • 我已经考虑过ruby-debug,但不幸的是,在脚本运行时无法看到当前行正在执行。唯一的方法是在某处设置断点,但这不是我想要的。我只是想运行脚本并在某个时间打印正在执行的当前行,无论它是什么。
    • 我要提出的建议是可怕的,但绝望的时刻和所有这些......以下的一些组合呢:stackoverflow.com/a/3236342/3277393stackoverflow.com/a/12175847/3277393。您可以在每个方法调用中创建一个挂钩(因为 ruby​​ 中的几乎所有内容都是方法调用)并在它开始执行后打印行号。由于这就像从消防水管中喝水一样,您还可以考虑过滤输出以仅显示您感兴趣的源文件中的行号。
    • 先前评论中使用set_trace_func 的建议对我有用。转储每个正在执行的调用与进程正在执行的每个系统调用的 strace 输出混合,并设法追踪有问题的代码行。如果它有效,它并不愚蠢。
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    相关资源
    最近更新 更多