2010-11-14 114 views
0

我試圖在某些本機代碼中調試訪問衝突錯誤,並且我已經爲崩潰進行了小型轉儲。使用Visual Studio調試崩潰轉儲時缺少調用堆棧幀

當打開與Visual Studio的崩潰轉儲,這裏發生了什麼:

如果VS找不到我的問題的原生DLL的符號,它顯示正確的調用堆棧幀(包括在我的代碼的位置錯誤從)生成。但是我當然看不到消息來源。

如果VS可以找到符號(我把它們放在正確的位置,輸出窗口顯示MyProblematic.dll的符號被加載),我只在調用堆棧中看到一幀 - 這是msvcr90.dll。顯然這對我沒有多大幫助。

任何人都可以解釋這一點嗎?

謝謝

回答

1

好吧,這很容易解釋。如果堆棧幀被損壞,那麼小型轉儲接受者和調試器都不能走棧來向你展示更多。很容易做到,例如strcpy(),並溢出堆棧緩衝區的末尾,以便保存的EBP和返回地址被跺下來。而且,是的,無論診斷的質量如何好,都幾乎不可能診斷。祝你好運。