【发布时间】:2012-04-06 06:40:39
【问题描述】:
我有以下堆栈跟踪。是否有可能从中找出对调试有用的东西?
Program received signal SIGSEGV, Segmentation fault.
0x00000002 in ?? ()
(gdb) bt
#0 0x00000002 in ?? ()
#1 0x00000001 in ?? ()
#2 0xbffff284 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
(gdb)
当我们得到Segmentation fault 时从哪里开始查看代码,而堆栈跟踪不是那么有用?
注意:如果我发布代码,那么 SO 专家会给我答案。我想从 SO 那里得到指导并自己找到答案,所以我不会在这里发布代码。道歉。
【问题讨论】:
-
可能你的程序跳进了杂草 - 你能从堆栈指针中恢复任何东西吗?
-
另一件要考虑的事情是帧指针是否设置正确。您是在没有优化的情况下构建还是传递了
-fno-omit-frame-pointer之类的标志?此外,对于内存损坏,valgrind可能是更合适的工具,如果您愿意的话。