我在使用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上运行它
答案 0 :(得分:0)
所以我的问题是,核心转储是否捕获了使用malloc分配的内存块?不仅仅是堆栈帧内存,就像这个例子中所示。
这是正确的。
您观察到的症状通常表明您的core
已被截断。
当你的ulimit -c
太低,或者你的磁盘空间不足时,就会发生这种情况。
另一种可能性是,如果你的core
传输受损, FTP将它从一台机器转移到另一台机器进行分析。