我在使用 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到另一台机器进行分析,则在传输过程中损坏。