2011-05-26 74 views
1

我們試圖在一些生成的代碼中跟蹤一些堆棧碎片錯誤。問題是堆棧砸錯誤不是100%確定性的,只發生在一臺機器上,而不是其他機器。有什麼可能的原因會導致行爲上的差異?機器之間差異堆棧粉碎行爲的原因

我們使用堆棧保護器標誌運行gcc。

+0

很多原因:內存安裝量,其他應用程序的運行,宇宙射線.... – 2011-05-26 09:56:12

+0

米奇:是不是真的那麼糟糕嗎?你是說我們完全處於混亂之中嗎? – svenningsson 2011-05-26 09:57:31

+0

有時不混沌但不確定;但如果涉及線程和時間安排,則可能會發生在罕見或不可預知的場合。我已經看到多線程代碼工作99次100%....然後失敗。如果你幸運的話,這只是一個堆棧覆蓋錯誤,它總是發生,但偶爾會有後果。 – 2011-05-26 10:02:29

回答

2

嘗試使用Valgrind

Memcheck: a memory error detector

如果線程和時間參與是可能的,它可能發生在罕見的或不可預測的場合。我已經看到多線程代碼工作99次100%....然後失敗。如果你幸運的話,這只是一個堆棧覆蓋錯誤,它總是發生,但偶爾會有後果。

Ptrcheck: an experimental heap, stack and global array overrun detector

-fstack-protector + valgrind ==> stack array overflow debugging?

你可以嘗試使堆金絲雀與gcc-fstack-protector-all選項。

+0

感謝您的建議!我們已經使用'gcc'的堆棧保護器,這就是我們如何檢測到問題。使用'valgrind'雖然沒有給我什麼。有關如何使用它的具體建議? – svenningsson 2011-05-26 10:27:13