使用gdb分析核心转储帧

时间:2016-11-08 11:40:43

标签: c++ linux gdb

我正在分析我的应用程序生成的核心转储。从堆栈跟踪中我可以看到下面的行     来自/lib/tls/libc.so.6的raise()中的#0 0x00779eff

#1  0x0077b705 in abort () from /lib/tls/libc.so.6

#2  0x006554f7 in __cxa_call_unexpected () from /usr/lib/libstdc++.so.5

#3  0x00655544 in std::terminate () from /usr/lib/libstdc++.so.5

#4  0x006556b6 in __cxa_throw () from /usr/lib/libstdc++.so.5

#5  0x006558d2 in operator new () from /usr/lib/libstdc++.so.5


#6  0x006559bf in operator new[] () from /usr/lib/libstdc++.so.5
#7  0x090c15df in Buffer::resize ()

#8  0x090bd230 in Buffer::Buffer ()

缓冲功能的定义如下

int
Buffer::resize (
    size_t      size    
    )
{
    …….
}

现在我选择了第7帧

    (gdb) f 7
#7  0x090c15df in Buffer::resize ()
(gdb) info frame
Stack level 7, frame at 0xbfff82f0:
 eip = 0x90c15df in Buffer::resize(unsigned int); saved eip 0x90bd230
 called by frame at 0xbfff8310, caller of frame at 0xbfff8280
 Arglist at 0xbfff82e8, args: 
 Locals at 0xbfff82e8, Previous frame's sp is 0xbfff82f0
 Saved registers:
  ebx at 0xbfff82e4, ebp at 0xbfff82e8, esi at 0xbfff8250, edi at 0xbfff8254, eip at 0xbfff82ec

但是想检查传递给它的大小的值是多少 我怎么做 ?任何帮助将不胜感激

由于 SKP

1 个答案:

答案 0 :(得分:0)

最简单的方法(自问题改变后调整):

p size

p(打印的缩写)将发出size的值。

专业提示:点击Ctrl + x + a即可查看您当前正在执行的代码。 (也可以使用list gdb - 命令。)