核心转储中的gdb视图结构值

时间:2014-11-06 14:19:00

标签: c debugging gdb

我在使用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上运行它

1 个答案:

答案 0 :(得分:0)

  

所以我的问题是,核心转储是否捕获了使用malloc分配的内存块?不仅仅是堆栈帧内存,就像这个例子中所示。

这是正确的。

您观察到的症状通常表明您的core已被截断。

当你的ulimit -c太低,或者你的磁盘空间不足时,就会发生这种情况。

另一种可能性是,如果你的core传输受损, FTP将它从一台机器转移到另一台机器进行分析。