C - 核心转储中的 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

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

这是正确的。

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

当您的ulimit -c太低或写入磁盘空间不足时,可能会发生这种情况。

另一种可能性是,例如,如果您将core从一台机器FTP到另一台机器进行分析,则在传输过程中损坏。

最新更新