簡體   English   中英

gdb映射顯示不正確的成員變量

[英]gdb map shows incorrect member variables

我正在嘗試調試在測試系統上生成的核心文件。 它是由於一個assert()被觸發而生成的。

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似乎總是錯誤地報告映射中的指針值。
我在地圖中存儲指針的方式有問題嗎?
檢查地圖時我做錯什么了嗎?
我還有其他方法可以正確訪問內存嗎?

我遇到了類似的問題,因為我的代碼處於Release模式。 例如,運行cmake時是否添加了標志-DCMAKE_BUILD_TYPE=Debug 還是gcc -g選項標志? http://www.rapidtables.com/code/linux/gcc/gcc-g.htm

bt顯示帶有??的多個幀 其次是實際功能。 不知道為什么會這樣。

最有可能是因為測試和開發系統之間的系統庫不匹配。 有關如何解決此問題的信息 ,請參見此答案

映射中的指針值似乎總是被gdb錯誤地報告

如果您確實有不匹配的情況(我確信您確實有99.9%的不匹配),那么您可以忽略其余的堆棧-保證是虛假的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM