gpt4 book ai didi

gdb - 我怎样才能在 gdb 中调试这个 SIGSEGV?

转载 作者:行者123 更新时间:2023-12-02 07:13:32 30 4
gpt4 key购买 nike

我正在构建以前可以工作的代码,但我遇到了段错误,我无法弄清楚哪里出了问题。 gdb 捕获错误,但没有指出明显的原因。它显示的源代码行是一个函数名,所以它甚至没有进入函数。如果我查看指令的反汇编,它仍在设置堆栈,所以堆栈可能被弄乱了。那么我应该如何调试呢?这是在 QNX 6.2 中,仅控制台 gdb。

0x0816b829 in __ml (this=0x79b963c, anMultiplier=0) at ../u_matrix.cpp:56
56 tcMatrix tcMatrix::operator*(float64 anMultiplier)

0x816b820 <__ml>: push %ebp
0x816b821 <__ml+1>: mov %esp,%ebp
0x816b823 <__ml+3>: sub $0x13ac,%esp
0x816b829 <__ml+9>: push %edi
0x816b82a <__ml+10>: push %esi
0x816b82b <__ml+11>: push %ebx

最佳答案

您崩溃的指令是 push %edi

这很可能意味着您有堆栈溢出。

堆栈溢出的一个可能原因是无限递归。如果 (gdb) where 显示无休止的函数调用流,那就是你的问题。

如果 where 显示合理的调用顺序,则重复执行 info frameup,寻找尺寸过大的帧。

最后,问题可能是你的执行环境发生了变化,而不是你程序中的任何东西。我不确定 ulimit -s 的 QNX 等效项是什么,但您的堆栈限制可能太小了。

关于gdb - 我怎样才能在 gdb 中调试这个 SIGSEGV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3318900/

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