gpt4 book ai didi

c - 如何检测堆栈溢出点

转载 作者:IT王子 更新时间:2023-10-29 00:02:48 30 4
gpt4 key购买 nike

我的 C 程序有以下问题:某处发生堆栈溢出。尽管在没有优化和使用调试器符号的情况下进行编译,但程序会以以下输出退出(在 Linux 上的 gdb 内部或外部):

程序因信号 SIGSEGV、段错误而终止。该程序不再存在。

我能检测到这实际上是堆栈溢出的唯一方法是通过 valgrind 运行程序。有什么方法可以强制操作系统转储调用堆栈跟踪以帮助我找到问题?

遗憾的是,gdb 也不允许我轻松进入该程序。

最佳答案

如果您允许系统转储核心文件,您可以使用 gdb 分析它们:

$ ulimit -c unlimited # bash sentence to allow for infinite sized cores
$ ./stack_overflow
Segmentation fault (core dumped)
$ gdb -c core stack_overflow
gdb> bt
#0 0x0000000000400570 in f ()
#1 0x0000000000400570 in f ()
#2 0x0000000000400570 in f ()
...

有时我看到生成错误的核心文件有不正确的堆栈跟踪,但在大多数情况下,bt 会产生一堆对同一方法的递归调用。

核心文件可能有不同的名称,其中可能包含进程 ID,这取决于您当前系统中内核的默认配置,但可以通过(以 root 身份运行或使用 sudo)进行控制:

$ sysctl kernel.core_uses_pid=1

关于c - 如何检测堆栈溢出点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/742200/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com