我正在嘗試調試在測試系統上生成的核心文件。它是由於被觸發的assert()而生成的。
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 ??()
我去了包含斷言的框架,並試圖打印出一些地方 和成員變量。有些變量總是說'不能訪問內存0x < some-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錯誤地報告。
我在地圖上存儲指針的方式有什麼問題嗎?
我在檢查地圖時是否有問題?
還有什麼我可以做的正確訪問內存?