【问题标题】:gdb stackoverflowgdb 堆栈溢出
【发布时间】:2011-03-25 08:34:35
【问题描述】:

假设我正常运行一个程序,它调用某个函数(比如 A() ),该函数递归调用自身直到堆栈溢出(这发生在 A() 被调用大约 10 次之后)。如果我在 gdb 下运行相同的程序,即使 A() 被递归调用了 20 次以上,堆栈也没有溢出。是因为我是在gdb下跑的才出现这种情况,还是有其他原因?

编辑:我将复制粘贴我获得的回溯,有任何迹象表明为什么会发生段错误?更大的问题是如何找到它?

【问题讨论】:

  • 10 似乎是一个非常少的堆栈溢出调用...
  • 你有这样行为的代码吗?
  • 不只是 A(),就像 A() -> B() -> C() -> D() 和 D() 调用 A(),所以链继续下去直到堆栈溢出。 (10 不是实际数字,我的意思是即使同一条链在 gdb 中运行更多次,也不会导致溢出。
  • 您如何跟踪调用 A 的次数? (例如,如果是通过日志记录,则需要确保在崩溃发生之前刷新输出)。
  • 嗯......因为它是一个递归调用并且你正在破坏堆栈,所以你的递归终止逻辑可能不正确......我假设 tcmalloc.cc 是你的代码?你的代码是什么样的,你是如何终止递归的……

标签: c gdb stack-overflow


【解决方案1】:

是因为我是在gdb下跑的,还是有其他原因?

允许的递归调用次数不取决于编译器或调试器。它受限于堆栈的大小。假设程序在相同的操作系统上运行,我不确定递归调用的数量在你的情况下是否不同。

【讨论】:

    猜你喜欢
    • 2019-05-18
    • 2012-09-29
    • 1970-01-01
    • 2012-04-15
    • 2012-12-20
    • 2011-03-02
    • 2011-08-22
    • 2023-03-04
    相关资源
    最近更新 更多