【发布时间】:2021-04-20 14:33:23
【问题描述】:
我有一个来自 linux c++ 程序的核心文件,它因分段错误而崩溃。查看回溯和代码,我发现一个指针/对象可能是垃圾。指针地址是this=0x62900000f200,那么有没有办法可以确定它是否可能是使用 GDB 的有效地址?
我希望有一种方法让 GDB 告诉我分配的内存区域是什么,或者核心转储包含哪些内存。我知道准确度会很低,因为稍微损坏的指针仍有可能指向“有效”内存,但希望有一种方法可以识别不可能有效的指针。
我看到过一些问题,询问指针是否“有效”,并且我知道确定指针是否已经被释放,或者它是否指向错误的对象等的复杂性,但这不是我想要的。我问。我只是想要一个测试,“这个内核包含从地址 0x01 到 0x50 的所有内存,而你的指针是 0x70,所以它显然是无效的。”
【问题讨论】:
-
您是否总是有完整的核心转储?如果是这样,有一个简单的方法。
x/b 0x62900000f200或p *(char *)0x62900000f200将打印该地址的字节,前提是它是有效地址并且数据存在于核心转储中,否则 GDB 将输出错误消息Cannot access memory at address 0x62900000f200。 -
@MarkPlotnick,是的,我们总是有完整的转储。我会试一试。我没有考虑“手动”尝试访问该内存。我仍然想知道是否有“这个转储包含什么内存”表或什么的。
标签: c++ pointers memory gdb coredump