我在使用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/

10-12 05:18