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