我在使用gdb分析核心转储时遇到问题。我无法查看C代码中任何结构的内容。
当我使用时:
print myStruct->val
我懂了
Cannot access memory at address 0x2031b860
要么
print *myStruct
我犯了同样的错误。
当我尝试从代码中的所有其他结构打印内容时,就会发生这种情况。
但是,当我尝试打印函数中的局部变量时,它可以正常打印。
执行的命令顺序为:
gdb ./myApp ./core
(gdb)bt
.
.
.
#25 0x0868b276 in ikev2_check_icv (ike_sa=0x2031b860, packet=0x2031a950) at ikev2_payload.c:460
.
.
(gdb) frame 25
(gdb) print ike_sa
$1 = (struct ikev2_sa *) 0x2031b860
(gdb) print *ike_sa
Cannot access memory at address 0x2031b860
(gdb)
所以我的问题是,核心转储是否捕获了使用malloc分配的内存块?从此示例看来,不仅是堆栈帧存储器。
我在Linux 2.6.32.45-0.3-xen x86_64上运行
最佳答案
所以我的问题是,核心转储是否捕获了使用malloc分配的内存块?从此示例看来,不仅是堆栈帧存储器。
那是对的。
您观察到的症状通常表明您的core
被截断。
当您的ulimit -c
太低时,或者当磁盘空间写满时,可能会发生这种情况。
另一种可能性是,例如,如果您core
在传输过程中被损坏,通过FTP将其从一台计算机转移到另一台计算机进行分析。
关于c - 核心转储中的gdb View 结构值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26781711/