2010-09-15 53 views
2

在Visual Studio中的調用堆棧窗口,它報告:什麼是所謂的「框架」在視覺工作室?

[Frames below may be incorrect and/or missing, no symbols loaded for IPCamera.ax] 

是什麼意思框架,爲什麼缺少符號可能會導致其不正確AFAIK,符號只是爲了調試信息,沒有的符號?只會使源看不見。

alt text

+0

這http://stackoverflow.com/questions/3717988/why-does-the-debugger-need-symbols-to-reconstruct-the-stack/3718134#3718134可能幫助爲什麼。 – 2010-09-15 14:58:38

回答

5

幀==堆棧幀。

堆棧幀是存儲調用堆棧上每個函數調用信息的記錄。它包含所調用函數的所有參數,局部變量和潛在返回值。

對於當前正在運行(即還沒有退出)的每個函數調用,調用堆棧上都有一個額外的幀。

缺少符號確實可導致堆棧幀的不正確顯示,這主要是由於兩種現象:

  • 函數內聯,和
  • 尾部調用優化。

在這兩種情況下,實際代碼中的函數調用都被轉換成其他的東西,所以堆棧幀丟失(因爲沒有調用產生,因此沒有堆棧幀)。

+0

爲什麼缺少符號可能會導致錯誤?編輯後仍然沒有意義。 – COMer 2010-09-15 12:46:24

+0

有沒有辦法知道在兩個斷點之間執行了多少行程序集? – COMer 2010-09-15 12:56:41

+0

Konrad解釋說,源代碼中存在的函數之間的概念邊界在優化和內聯過程中可能會模糊。即使是無內聯,編譯器可能會生成可執行代碼,從多個不同的源代碼函數跳轉到一個位置,因此並不總是可以說「執行停在這個地址,所以在函數X中」。調用棧通常也會顯示函數參數,但是需要解釋:是通過bool,int,text,指針(指向什麼?)的值?在沒有符號信息的函數內部,你無法辨別。 – 2010-09-15 13:26:02