调用堆栈和堆栈跟踪有啥区别?

Posted

技术标签:

【中文标题】调用堆栈和堆栈跟踪有啥区别?【英文标题】:What is the difference between Call Stack and Stack Trace?调用堆栈和堆栈跟踪有什么区别? 【发布时间】:2011-11-20 21:47:02 【问题描述】:

术语“调用堆栈”和“堆栈跟踪”有什么区别?

【问题讨论】:

不能说我自己没想到这一点 大约 3 个字母? 【参考方案1】:

调用堆栈通常是“当前的操作堆栈” - 即在它运行时。

堆栈跟踪通常是调用堆栈的副本,​​它会在某种故障时记录下来,例如一个例外。

换句话说,当您在调试时,您将查看当前调用堆栈 - 但是当您查看日志时,您将获得堆栈跟踪。至少,这是我对这些术语的解释:)

【讨论】:

我认为堆栈跟踪就像您在调用堆栈中的进度的结果(试图想出一个更好的词)?还是说错了? @AndyC:我不确定我理解“调用堆栈的进展”是什么意思。 嗯,那我可能错了(或者我真的不擅长解释:))。有点像如果调用堆栈是您要通过应用程序的路线,那么堆栈跟踪会显示您到目前为止的工作情况? @Jon :所以如果我说:“调用堆栈是指一个正在进行的进程,而‘堆栈跟踪’是指一个失败进程的日志”我是对的吗? @pencilCake:嗯,你可以得到一个堆栈跟踪,而不会总是失败 - 即使有失败,它也可能比整个过程失败更本地化- 但我认为这是正确的。【参考方案2】:

调用堆栈是一种数据结构,用于存储有关正在运行的程序中活动子程序的信息。 堆栈跟踪是调用堆栈的表示。

【讨论】:

【参考方案3】:

我认为***在区分它们方面做得相当好:

调用堆栈是一种堆栈数据结构,用于存储有关计算机程序的活动子例程的信息

堆栈跟踪是程序执行期间某个时间点的活动堆栈帧的报告。

换句话说,调用堆栈是内存中的实际数据结构,而堆栈跟踪是所述数据结构的快照。

【讨论】:

以上是关于调用堆栈和堆栈跟踪有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Python:堆栈跟踪与回溯

如何获取 gdb 调用堆栈跟踪?

xperf 调用堆栈跟踪,特定于 dll

Erlang堆栈跟踪中包含多少条目?

LinuxBPF学习笔记 - 堆栈跟踪[3]

LinuxBPF学习笔记 - 堆栈跟踪[3]