生成されたコードのスタックスマッシングエラーを追跡しようとしています。問題は、スタックスマッシングエラーが100%決定論的ではなく、1台のマシンでのみ発生し、他のマシンでは発生しないことです。行動の違いにはどのような理由が考えられますか?
スタックプロテクターフラグを使用してgccを実行しています。
生成されたコードのスタックスマッシングエラーを追跡しようとしています。問題は、スタックスマッシングエラーが100%決定論的ではなく、1台のマシンでのみ発生し、他のマシンでは発生しないことです。行動の違いにはどのような理由が考えられますか?
スタックプロテクターフラグを使用してgccを実行しています。
Valgrindを使ってみる
スレッドとタイミングが関係している場合、まれにまたは予測できない状況で発生する可能性があります。私は、マルチスレッド コードが 100 回中 99 回動作するのを見てきました....そして失敗します。運が良ければ、常に発生するスタック上書きエラーですが、結果が生じるのはまれです。
Ptrcheck: 実験的なヒープ、スタック、およびグローバル配列のオーバーラン検出器
-fstack-protector + valgrind ==> スタック配列オーバーフローのデバッグ?
gcc
の-fstack-protector-all
オプションでスタックカナリアを有効にしてみてください。