一个线程是否有可能覆盖另一个线程堆栈中的内存?因此,例如,可能会破坏返回地址。
如果可能,是否有任何调试工具或其他实践来帮助检测此类问题?
我说的是在 Linux x86 系统上使用 pthreads 的 C/C++ 应用程序。
一个线程是否有可能覆盖另一个线程堆栈中的内存?因此,例如,可能会破坏返回地址。
如果可能,是否有任何调试工具或其他实践来帮助检测此类问题?
我说的是在 Linux x86 系统上使用 pthreads 的 C/C++ 应用程序。
您可以使用 GCC mudflap library/instrumentation。
如果你使用自己的内存管理器来减少sbrk
系统调用,valgrind 可能检测不到 ABW。因为 valgrind 覆盖malloc
了 libc。如果是这种情况,您可能必须重新链接(或编译)您的程序以使用malloc
而不是您自己的内存分配函数。
除了免费工具 valgrind 之外,如果您不介意使用商业工具,purify可能是另一种选择。
这两种工具的使用方式不同。使用 purify,您需要将您的程序与 purify 提供的库重新链接。使用 valgrind,您只需通过 valgrind 运行程序,无需重新链接。