2017-08-31 12 views
0

テストシステムで生成されたコアファイルをデバッグしようとしています。これは、アサートされたために発生しました()がトリガーされました。
gdbマップで不正なメンバー変数が表示される

btは、複数のフレームを??その後に実際の機能が続きます。それがなぜそうであるかわからない。

(gdb) bt 
#0 0x00007f6c2d1eb035 in ??() 
#1 0x00007f6c2d1ee79b in ??() 
#2 0x00007f64fc3b0240 in ??() 
#3 0x00007f6c2fdeb092 in ??() 
#4 0x00007f6c2d1bbc58 in ??() 
#5 0x00007f6c3205d9c0 in ??() 
#6 0x0000000002a06a00 in ??() 
#7 0x00007f64fc3b0150 in ??() 
#8 0x00007f64fc3b0170 in ??() 
#9 0x00000000018fb2cb in operator,<AssertCollectorBase> (this=<optimized out>, t=...) at ./shared/Assert.h:116 
#10 X (platformContext=<optimized out>, severity=<optimized out>, msg=0x7f64fc3b0740 "Enabling poll on wrong connection.") at ss/*.cpp:497 
#11 0x00000000025c2fd7 in Y (severity=1 '\001', msg=...) at *.cc:1065 
#12 0x00000000025d0875 in Z (this=0x7f6bcbbbe440) at *.cc:870 
#13 0x00007f6c2ebe0e9a in ??() 
#14 0x0000000000000000 in ??() 

私はアサートを含むフレームに行き、いくつかの地元 とメンバー変数をプリントアウトしてみました。変数の中には、「メモリにアクセスできない」0xsome-memory-addr>
STLマップを印刷しようとしましたが、返されるポインタは常に無効です。

(gdb) pmap connmap_ int SmaConnection* 
elem[0].left: $1 = 219 
elem[0].right: $2 = (SmaConnection *) 0x9c63d4e000007f6b 
elem[1].left: $3 = 463 
elem[1].right: $4 = (SmaConnection *) 0x9c63bd4000007f6b 
elem[2].left: $5 = 469 
elem[2].right: $6 = (SmaConnection *) 0x9c63e82000007f6b 
elem[3].left: $7 = 471 
(gdb) p *$2 
Cannot access memory at address 0x9c63d4e000007f6b 
(gdb) 

マップのポインタ値は、プログラムに何も問題がない場合でも、gdbによって常に正しく表示されないようです。
マップにポインタを格納する方法に問題がありますか?
地図を調べて何か問題がありますか?
メモリに正しくアクセスするために何かできることはありますか?

答えて

0

私のコードはReleaseモードだったので、私は同様の問題がありました。 たとえば、cmakeを実行するときにフラグ-DCMAKE_BUILD_TYPE=Debugを追加しましたか? またはgcc -gオプションフラグ? (http://www.rapidtables.com/code/linux/gcc/gcc-g.htm

0

btは??その後に実際の機能が続きます。それがなぜそうであるかわからない。

ので、テストおよび開発システム間のシステムライブラリの不一致のほとんどの場合。修正方法については、this answerを参照してください。マップ内のポインタ値は常にあなたは(私はあなたが99.9%確信しています)のミスマッチを持っている場合は、あなたがの残りの部分を無視することができますgdbの

によって誤って報告されているように見える

スタック - それは偽であることが保証されています。

関連する問題