1

我们正在尝试在一些生成的代码中追踪一些堆栈粉碎错误。问题是堆栈粉碎错误不是 100% 确定性的,并且只发生在一台机器上而不是其他机器上。行为差异可能有哪些原因?

我们正在使用堆栈保护器标志运行 gcc。

4

1 回答 1

2

尝试使用Valgrind

Memcheck:内存错误检测器

如果涉及线程和时间,它可能会在罕见或不可预测的情况下发生。我已经看到多线程代码在 100 次中工作了 99 次......然后失败了。如果幸运的话,这只是一个堆栈覆盖错误,它一直在发生,但只是偶尔会产生后果。

Ptrcheck:一个实验性的堆、栈和全局数组溢出检测器

-fstack-protector + valgrind ==> 堆栈数组溢出调试?

您可以尝试使用gcc'-fstack-protector-all选项启用堆栈金丝雀。

于 2011-05-26T09:56:57.717 回答