【问题标题】:What's the difference between a stack-trace and a back-trace?堆栈跟踪和回溯有什么区别?
【发布时间】:2014-10-20 13:41:25
【问题描述】:

我真的虽然我会在网上找到答案,但我找不到。有什么区别吗?人们说“回溯”是在抛出异常时生成的,而堆栈跟踪是从应用程序启动到抛出异常的方法调用的列表。如果我们假设堆栈跟踪是一个数组,那么最后一个元素将是引发异常的方法。回溯会是相反的情况吗?例如,在像 Ruby 这样的编程语言中,如果我们有:

begin
  raise 1
rescue
  p $!.backtrace ; p caller(0) #=> displays the back-trace, then the stack-trace
end

它们将输出 2 个不同的数组,这表明它们有一些根本不同的东西。

【问题讨论】:

    标签: ruby stack-trace backtrace


    【解决方案1】:

    “Backtrace”、“stack trace”、“stack backtrace”等是同一事物的名称。 “Backtrace”特别有可能来自同名的 Linux 工具。堆栈跟踪不仅仅指异常 - 程序调用堆栈的当前状态始终可以显示为堆栈跟踪(回溯可以,但许多调试器视图和工具也是如此)。在异常或错误期间输出堆栈跟踪很有帮助。

    编辑:哎呀,我以为我还在'C'标签中-但是查看文档, Exception.backtrace 和 caller 都应该保存数组,其中调用堆栈的顶部首先在数组中。它们的深度和某些格式似乎存在差异。

    【讨论】:

    • Linux 在创建 Ruby 时几乎不存在,我怀疑 Ruby 中的任何术语都源自那里。 Ruby 于 1993 年 2 月创建,Linux 于 1991 年夏天的某个时候创建​​。SLS,第一个 Linux 发行版只有 5 个月大,并且在 Ruby 刚开始时存在错误。
    • @JörgWMittag 我的推测,您可能是对的,但这取决于首先添加 Exception.backtrace 的时间。它更可能是当时流行的术语,因为 GNU 工具倾向于使用该术语(例如 GDB 和 backtrace 工具,它首先存在于 Unix 上)。就像我说的——这里是偶然的!我很惊讶 Ruby 居然这么老了。
    • 构思于 1993 年 2 月 24 日,发布于 1995 年,1.0 于 1996 年圣诞节。
    猜你喜欢
    • 2011-11-20
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 2021-05-10
    • 2016-01-19
    • 1970-01-01
    相关资源
    最近更新 更多