有沒有辦法在Visual Studio中監視調用堆棧的大小?調用堆棧窗口在運行時提供,但不顯示堆棧的大小。我正在使用C++並面臨堆棧溢出問題。我知道我正在使用的一些遞歸函數可能是錯誤的,但在解決這些問題之前,我想監視調用堆棧大小以查看發生了什麼。在Visual Studio中監視調用堆棧大小
3
A
回答
4
使用數據斷點在這裏可能會有幫助。無論您身在何處,只要您在正確的線程上,都可以使用Debug + New Breakpoint + New Data Breakpoint。地址欄中輸入@esp - 250000
。按F5繼續運行,當可用堆棧空間消耗了四分之一時,它將在遞歸內部的某處斷開。來自esp的確切偏差並不重要。
4
有幾種方法:
- 檢查ESP在監視窗口。您可以在觀察窗口觀看
@esp
。比較一下ESP在這個過程的開始。 - 同樣,檢查第一個/最後一個堆棧幀中堆棧分配變量的地址。
請注意,堆棧通常是向後分配的,所以隨着堆棧的增長,ESP越來越小。
+0
請注意,對於Windows,這似乎不起作用(請參閱:http://stackoverflow.com/questions/7490095/getting-the-size-of-the-callstack) – 2012-12-13 15:45:21
0
「Microsoft推薦的本機規則」代碼分析可以查看您的代碼,並查找可能會使您的堆棧溢出的代碼問題。我不確定找到遞歸問題有多好,但是它在我的代碼中發現了一個問題,我使用了一個非常大的類(1MB)的本地實例。在運行時,唯一的錯誤是堆棧溢出。當然,在棧上使用大對象是一個壞主意;你應該只使用小物件和物品,將大部分髒衣物存放在堆上。
在VS2012,該項目右鍵單擊屬性,並選擇代碼分析,然後點擊複選框啓用代碼分析。運行需要幾分鐘的時間。
相關問題
- 1. 在Visual Studio中錄製調用堆棧
- 2. 在Visual Studio 2010中可視化調用方法調用堆棧
- 3. 在Visual Studio F#調用堆棧問題
- 4. 調用堆棧大小?
- 5. 在JavaScript中調用堆棧大小
- 6. 最大調用堆棧大小
- 7. 在遞歸函數中調用堆棧大小:最大調用堆棧大小低於預期
- 8. 如何調試在Visual Studio中的錯誤調用堆棧
- 9. 視頻JS錯誤:最大調用堆棧大小超出
- 10. magnificpopup「Maxium調用堆棧大小超過」
- 11. OpenCL函數調用堆棧大小
- 12. 在setTimeout調用期間超出最大調用堆棧大小
- 13. 的Android:增加調用堆棧大小
- 14. 如何在Visual Studio 2005中獲得完整的調用堆棧?
- 15. 在Visual Studio 2010中調用堆棧時間機器
- 16. Uncaught RangeError在React App中超出最大調用堆棧大小
- 17. 在jQuery驗證中超出最大調用堆棧大小
- 18. 在javascript畫布中超出了最大調用堆棧大小
- 19. 在AngularJS中超出最大調用堆棧大小
- 20. Linux堆棧大小
- 21. 最大調用堆棧大小超出崩潰 - Firebase添加子監聽器
- 22. Android堆棧大小
- 23. 堆棧= java.lang.StackOverflowError的:堆棧大小8MB
- 24. Visual Studio中調用堆棧窗口的用途是什麼?
- 25. Swift如何調整堆棧視圖中的圖像大小
- 26. Linux上的JAVA堆大小監視
- 27. 從C++監視jvm堆大小
- 28. Tomcat7堆棧大小很小
- 29. 的RangeError:最大調用堆棧大小angular2
- 30. 遞歸 - 調用堆棧失敗測試的最大堆棧大小
@esp - 250000它總是保證四分之一的可用堆棧空間的消耗是多少?我的意思是我的設置可能有不同的堆棧大小。那麼,我的結局也會一樣嗎?有沒有地方可以查看這些信息? – Pavan 2013-11-17 05:58:45
在64位機器上,該寄存器被稱爲'rsp'。 – 2015-03-07 02:17:11