1

生成されたコードのスタックスマッシングエラーを追跡しようとしています。問題は、スタックスマッシングエラーが100%決定論的ではなく、1台のマシンでのみ発生し、他のマシンでは発生しないことです。行動の違いにはどのような理由が考えられますか?

スタックプロテクターフラグを使用してgccを実行しています。

4

1 に答える 1

2

Valgrindを使ってみる

Memcheck: メモリエラー検出器

スレッドとタイミングが関係している場合、まれにまたは予測できない状況で発生する可能性があります。私は、マルチスレッド コードが 100 回中 99 回動作するのを見てきました....そして失敗します。運が良ければ、常に発生するスタック上書きエラーですが、結果が生じるのはまれです。

Ptrcheck: 実験的なヒープ、スタック、およびグローバル配列のオーバーラン検出器

-fstack-protector + valgrind ==> スタック配列オーバーフローのデバッグ?

gcc-fstack-protector-allオプションでスタックカナリアを有効にしてみてください。

于 2011-05-26T09:56:57.717 に答える