是否有可能一个线程覆盖另一个线程堆栈中的内存?因此可能 例如破坏返回地址。
如果可能,是否有任何调试工具或其他实践来帮助检测此类问题?
我说的是在 Linux x86 系统上使用 pthreads 的 C/C++ 应用程序。
最佳答案
如果您使用自己的内存管理器来减少 sbrk
系统调用,valgrind 可能无法检测到 ABW。因为 valgrind 覆盖了 libc 的 malloc
。如果是这种情况,您可能必须重新链接(或编译)您的程序以使用 malloc
而不是您自己的内存分配函数。
除了免费工具valgrind,如果不介意使用商业工具,purify可能是替代方案。
这两种工具在使用方式上有所不同。 使用 purify,您需要将您的程序与 purify 提供的库重新链接。 使用 valgrind,您只需通过 valgrind 运行您的程序,无需重新链接。
关于c++ - 在 Linux 上的多线程 C++ 应用程序中检测堆栈溢出/覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11117858/