2016-11-08 15 views
0

私のアプリケーションで生成されたコアダンプを解析しています。スタックトレースから私は昇給で以下の行 #0 0x00779effを(見ることができます)gdbを使用したコアダンプフレームの解析

int 
Buffer::resize (
    size_t  size  
    ) 
{ 
    ……. 
} 
を次のように/lib/tls/libc.so.6

#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() 

からバッファ機能の定義は、

今私はフレーム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

これは、コードがデバッグシンボルでコンパイルされているかどうかに依存します。 resize関数はコンストラクタから呼び出されるので、これから使用されるパラメータの値を確認することはできませんか、コンストラクタにパラメータとして与えられるサイズですか? –

+0

これは-gオプションでコンパイルされます – user3160866

+0

最適化されたコードをデバッグしようとしていますか? – dbrank0

答えて

0

を理解されるであろう簡単な方法(質問が変化するので調整):

p size 

p(印刷用ショート)がsizeの値を放出します。

プロチップ:Ctrl + x + aを実行して、現在実行しているコードを確認してください。 (listgdb-コマンドでも得られます)

+0

このように印刷することはできません – user3160866

+0

何が表示されますか?あなたは '-g'(つまり.dbgシンボルでコンパイル)をしたことを確認しましたか? – m8mble

+0

リストを与えると、(gdb)リストとして表示されます << C++ - ネームスペース>> – user3160866

関連する問題