堆栈跟踪和反向跟踪之间有什么区别?

时间:2014-10-20 13:41:25

标签: ruby stack-trace backtrace

我真的虽然我在网上找到了答案,但我无法做到。有什么不同吗?人们说'回溯'是在抛出异常的情况下生成的,而堆栈跟踪是从应用程序启动时到抛出异常的点的方法调用列表。如果我们将堆栈跟踪视为数组,则最后一个元素将是抛出异常的方法。回溯的情况是否相反?例如,在像Ruby这样的编程语言中,如果我们有:

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

他们会输出2个不同的数组,这对我来说是存在根本不同的东西。

1 个答案:

答案 0 :(得分:10)

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

编辑:哎呀,以为我还在C' C' tag - 但是看一下文档,Exception.backtrace和caller都应该保存数组,其中调用堆栈的顶部是数组中的第一个。它们的深度和格式存在差异。