C++ and Valgrind Debugging
C++ and Valgrind Debugging
我在运行C++的ARM处理器上遇到内存问题,出现SEGFAULT错误。
我运行valgrind,它给了我这个信息:
==7298== Thread 6:
==7298== Mismatched free() / delete / delete []
==7298== at 0x482C80C: free (in /usr/lib/valgrind/vgpreload_memcheck-arm-linux.so)
==7298== Address 0x58186d8 is 0 bytes inside a block of size 29 alloc'd
==7298== at 0x482CC94: operator new[](unsigned int) (in /usr/lib/valgrind/vgpreload_memcheck-arm-linux.so)
==7298==
我进入gdb,在0x482CC94、0x58186d8和0x482C80C上运行"信息符号",调试器会说"没有符号匹配"。
程序中运行的线程太多了,我不知道从哪里开始。我很想把printf放在最有可能的线程中,看看这是否有帮助,但printf状态和valgrind输出之间似乎没有任何相关性。
如何调试此问题?有没有办法在我的代码中命名线程,这样Valgrind就可以显示除"线程6"之外的内容。如有任何指导,我们将不胜感激。
可能是在程序启动期间发生了分配/解除分配。尝试"--show below main"选项:
--显示在main下方=[默认:否]
"默认情况下,错误的堆栈跟踪不会显示main下面出现的任何函数,因为大多数时候C库的东西和/或官样文章都不感兴趣。或者,如果堆栈跟踪中不存在main,堆栈跟踪也不会显示类似main的函数(如glibc的__libc_start_main)下面的任何函数。此外,如果跟踪中存在类似main的功能归一化为(主项下),以便使输出更具确定性。
如果启用此选项,则将显示所有堆栈跟踪条目,并且不会对类主函数进行规范化。"
您可能还想查看"--read var info"
--读取var信息=[默认:否]
启用后,Valgrind将从DWARF3调试信息中读取有关变量类型和位置的信息。这大大减慢了Valgrind的启动速度,并使其使用了更多的内存,但对于可以利用它的工具(Memcheck、Helgrind、DRD)来说,它可能会导致更精确的错误消息。
你还可以尝试其他的选择。手册在这里:
http://valgrind.org/docs/manual/manual.html
- valgrind-hellgrind与泄漏检查的结果不同
- 额外分配valgrind
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- Valgrind:可以处理更多可能丢失的字节吗?
- 如何在程序执行时查看Valgrind Massif输出(或其他堆分析器)?
- C++/Qt Valgrind 未初始化的字节
- 在 valgrind c++ 上读取大小 8 无效
- VS2019 - Sudo Remote Debugging on Linux with Cmake project
- 了解 Linux 虚拟内存:valgrind 的 massif 输出显示了有和没有 --pages-as-heap 的主要差异
- Valgrind 在 std::string::swap 中报告 SIGILL
- Valgrind 大小为 8 且地址 0x5b7e520 的读取无效,在大小为 16 的块内为 0 字节 free'd
- 重载 new 和 delete 会导致 valgrind 错误
- Valgrind 在 QThread::start() 上报告内存泄漏
- 我可以让 valgrind 告诉我 _哪个_值未初始化吗?
- 使用 valgrind 检查我的链表暗示中的内存泄漏,让我"肯定丢失:1 个块中有 40 个字节"
- Valgrind 在 std::make_unique 中显示内存泄漏
- 为什么 valgrind 报告两个内存分配,而我的代码只请求一个?
- 如何将Valgrind与Qt Creator一起使用来调试远程应用程序?
- C++ and Valgrind Debugging