linux - 堆栈溢出段错误

标签 linux segmentation-fault

为什么 linux 内核会在堆栈溢出时产生段错误?当 c 中的 alloca 或临时数组的 fortran 创建溢出时,这会使调试变得非常尴尬。当然,运行时可能会产生更有用的错误。

最佳答案

您实际上可以使用信号处理程序捕获堆栈溢出的情况。

为此,您必须做两件事:

  • 使用 sigaction 为 SIGSEGV(段错误)设置信号处理程序,为此设置 SO_ONSTACK 标志。这指示内核在传递信号时使用替代堆栈。

  • 调用 sigaltstack() 以设置 SIGSEGV 的处理程序将使用的备用堆栈。

然后当你溢出堆栈时,内核会在传递信号之前切换到你的备用堆栈。进入信号处理程序后,您可以检查导致错误的地址并确定它是堆栈溢出还是常规错误。

关于linux - 堆栈溢出段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/81202/

相关文章:

c - ablkcipher_request_set_callback 有什么作用?

linux - AWK - 使用输入中的列值在输出中创建新列

c++ - 尝试添加到 C++ 中的 LinkedList。获取段错误

c - 段错误(核心已转储),但找不到故障

c++ - 用 Python+ctypes、segfault 包装 C++ 动态数组

linux - 如何根据时间戳从巨大的文本文件中删除记录?

linux iptables 错误行

regex - sed:在匹配之前显示行

线程切换上的 Python 段错误

c - 在 C 中获取段错误