我指的文章在http://www.wintoolzone.com/articles/AuthoringStackWalkerForX86.pdf製作堆棧沃克工程中的應用與優化啓用
我使用VC++ 2008年。我意識到,當我把優化「最大速度(/ O2)」,連我設置將「忽略幀指針」顯式指定爲否,獲取函數返回地址將無法通過堆棧幀指針正確工作。
在文章中,它提到:
「要求堆棧幀指針是 存在於所產生的碼 優化代碼,其中堆棧幀 指針不存在將不會被該代碼被踩踏 。它的左邊是練習 ,供讀者通過 來實現這個代碼庫。「
我想知道,你們中的任何一個人都有一種可移植的方式,可以通過優化和非優化代碼,而不需要假設堆棧幀指針的可用性?
目前,每一個功能由具有
push ebp
mov ebp,esp
作爲函數的代碼的第一行上述堆步行者例如正在假設。
我曾經試過RtlCaptureStackBackTrace
,但其侷限性高達62幀不爲我的目的。
但我的測試結果顯示事實並非如此。看到我更新的評論。 – 2010-12-08 03:59:48