我有一個xcode項目,代碼是用C++編寫的。我已經在遞歸函數中指出了一個不正常的程序行爲的原因,堆棧中的東西太多了...... 我不會確定問題是堆棧溢出還原壞東西,並設置陷阱堆棧溢出。 我該怎麼做?如何在命令行應用程序中檢測堆棧溢出?用C++寫在macos上?
現在我已經找到了「-fstack-protector-all」的叮噹聲,但是我不知道一旦發生了什麼事情。已經運行。我還發現「-fsanitize =」,但我不知道在'='之後寫了什麼。
謝謝。
我有一個xcode項目,代碼是用C++編寫的。我已經在遞歸函數中指出了一個不正常的程序行爲的原因,堆棧中的東西太多了...... 我不會確定問題是堆棧溢出還原壞東西,並設置陷阱堆棧溢出。 我該怎麼做?如何在命令行應用程序中檢測堆棧溢出?用C++寫在macos上?
現在我已經找到了「-fstack-protector-all」的叮噹聲,但是我不知道一旦發生了什麼事情。已經運行。我還發現「-fsanitize =」,但我不知道在'='之後寫了什麼。
謝謝。
沒有找到一個堆棧溢出確定方法。 您可以嘗試在堆棧頂部和每個新方法調用中放入一些「MAGIC」值,以檢查此「MAGIC」值是否仍然存在,並且尚未超出。
我怎麼知道最低的堆棧地址? –
你不需要知道地址。您只需將一個未使用的變量作爲堆棧中的第一個變量並將其初始化爲某個值即可。然後您只需檢查該值是否符合預期。 –
@MartijnOtto:這不起作用......堆棧從你放在它上面的「第一個」變量開始增長......最感興趣的是你是否到達另一端,它不能再增長(哪個這個答案指的是「頂級」):這樣做通常不會對堆棧中其他地方的數據做任何事情。 (如果過去堆棧內存不可訪問,或者隨機開始覆蓋其他程序數據,它通常會顯示爲SIGSEGV)。 –
在調試器('lldb'或'gdb')中運行它。 – trojanfoe
http://www.gnu.org/software/libsigsegv/ –