c++ - 在 C++ gdb 核心转储中,我可以查看是否仍分配了指针吗?

标签 c++ gdb

我在磁盘上有一个核心转储,它是由一个断言失败并中止的应用程序创建的。该应用程序是在 Linux/g++ 上以 Debug模式编译的。我怀疑在栈顶的栈帧中,我的this对象已经被delete了(我认为this不再一个有效的 ptr)。但是,重现此中止可能需要几天或更长时间。

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

最佳答案

这并非不可能,但如果您使用标准的 malloc/free/new/delete 调用,则非常接近。如果您认为您可以在几天内再次重现该问题,那可能是更快的方法。

与此同时,您可以为下一次事件做准备,以便更好地分析它。

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

LD_PRELOAD=libdmalloc.so your_program_here 将使用 dmalloc 运行程序,您可以设置标志以删除内存,这样您就可以知道是否有任何内存已被删除。

关于c++ - 在 C++ gdb 核心转储中,我可以查看是否仍分配了指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/898622/

相关文章:

c++ - 在 C++ 程序中读取命令行参数时出现内存错误

c++ - 使用 Visual C++ 11 的 Qt Creator

c++ - 如何配置 CMakeLists.txt 以安装共享库的公共(public) header ?

c++ - Winsock: Overlapped AcceptEx 指示新连接,而没有客户端连接

c++ - 即使有调试编译标志,表达式也是 "optimized out"

c - 如何调试无法使用gdb访问地址

c++ - 为什么必须在哪里放置 “template”和 “typename”关键字?

c - linux execve,段错误(strcmp_sse42)

c - GDB + TUI + GNU Screen - 将 gdb 输出发送到不同的 screen

linux - 无论如何都可以附加到流程的 map ,同时让您的文件从 map 中隐藏起来