C++ 在c++;gdb核心转储,我能看看指针是否仍然被分配吗?

C++ 在c++;gdb核心转储,我能看看指针是否仍然被分配吗?,c++,gdb,C++,Gdb,我在磁盘上有一个内核转储,它是由一个应用程序创建的,该应用程序未能通过断言并被中止。该应用程序是在Linux/g++上以调试模式编译的。我怀疑在堆栈顶部的堆栈帧中,我的此对象已被删除(我认为此不再是有效的ptr)。然而,复制这种流产可能需要几天或更长时间 我是否有办法从gdb(或其他地方)中查询新的/空闲的实现,并验证给定的内存地址是否是有效的分配内存?换句话说,我可以看看我的此是否仍被分配,或者它是否可能已被删除'd?它必须是静态的,因为我只有一个核心转储,而不是一个正在运行的可执行文件。这不

我在磁盘上有一个内核转储,它是由一个应用程序创建的,该应用程序未能通过断言并被中止。该应用程序是在Linux/g++上以调试模式编译的。我怀疑在堆栈顶部的堆栈帧中,我的
对象已被
删除(我认为
不再是有效的ptr)。然而,复制这种流产可能需要几天或更长时间


我是否有办法从gdb(或其他地方)中查询新的/空闲的实现,并验证给定的内存地址是否是有效的分配内存?换句话说,我可以看看我的
是否仍被分配,或者它是否可能已被
删除
'd?它必须是静态的,因为我只有一个核心转储,而不是一个正在运行的可执行文件。

这不是不可能的,但是如果您使用标准的malloc/free/new/delete调用,它非常接近。如果你认为你能在几天内重现问题,那可能是更快的途径

在此期间,您可以做的是为下一个事件做好准备,以便更好地分析它

是一个可以使用的免费实用程序,它将默认的C/C++内存函数替换为可以执行额外检查和记账的版本


LD\u PRELOAD=libdmalloc。因此,您的\u程序将使用dmalloc运行程序,您可以设置擦除内存的标志,以便知道是否已删除任何内存。

核心转储包含退出时程序的完整状态(包括进程内存分配的状态)。但是,您必须深入了解内存分配是如何工作的,才能确定对象是否仍然有效。但是,即使不知道确切的内存分配策略,在调试器中检查程序状态也可能导致发现问题。您是否检查了所有线程的堆栈中是否存在明显的“坏”值?他们自己可能会给你很有价值的提示


另一个非常好的方法是在windows中运行应用程序。

在windows中,我会查看此文件指向的内存,并在调试器中查找“feeefeee”。在调试模式下,在Windows中,将把它写入已删除的内存以帮助您进行调试。gcc/linux是否有类似的功能?