[英]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 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.