2

一个线程是否有可能覆盖另一个线程堆栈中的内存?因此,例如,可能会破坏返回地址。

如果可能,是否有任何调试工具或其他实践来帮助检测此类问题?

我说的是在 Linux x86 系统上使用 pthreads 的 C/C++ 应用程序。

4

2 回答 2

0

您可以使用 GCC mudflap library/instrumentation。

于 2013-05-20T20:06:14.840 回答
0

如果你使用自己的内存管理器来减少sbrk系统调用,valgrind 可能检测不到 ABW。因为 valgrind 覆盖malloc了 libc。如果是这种情况,您可能必须重新链接(或编译)您的程序以使用malloc而不是您自己的内存分配函数。

除了免费工具 valgrind 之外,如果您不介意使用商业工具,purify可能是另一种选择。

这两种工具的使用方式不同。使用 purify,您需要将您的程序与 purify 提供的库重新链接。使用 valgrind,您只需通过 valgrind 运行程序,无需重新链接。

于 2012-06-20T11:28:05.917 回答