gpt4 book ai didi

c - gdb 查看核心转储中的结构值

转载 作者:行者123 更新时间:2023-11-30 17:26:29 26 4
gpt4 key购买 nike

我在使用 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 上运行此程序

最佳答案

So my question is, does core dump catch memory blocks allocated with malloc? Not just stack frame memory, as it seems from this example.

这是正确的。

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

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

另一种可能性是您的核心在传输过程中损坏,例如,通过 FTP 将其从一台机器传输到另一台机器进行分析。

关于c - gdb 查看核心转储中的结构值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26781711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com