在Visual Studio中的調用堆棧窗口,它報告:什麼是所謂的「框架」在視覺工作室?
[Frames below may be incorrect and/or missing, no symbols loaded for IPCamera.ax]
是什麼意思框架,爲什麼缺少符號可能會導致其不正確AFAIK,符號只是爲了調試信息,沒有的符號?只會使源看不見。
在Visual Studio中的調用堆棧窗口,它報告:什麼是所謂的「框架」在視覺工作室?
[Frames below may be incorrect and/or missing, no symbols loaded for IPCamera.ax]
是什麼意思框架,爲什麼缺少符號可能會導致其不正確AFAIK,符號只是爲了調試信息,沒有的符號?只會使源看不見。
幀==堆棧幀。
堆棧幀是存儲調用堆棧上每個函數調用信息的記錄。它包含所調用函數的所有參數,局部變量和潛在返回值。
對於當前正在運行(即還沒有退出)的每個函數調用,調用堆棧上都有一個額外的幀。
缺少符號確實可導致堆棧幀的不正確顯示,這主要是由於兩種現象:
在這兩種情況下,實際代碼中的函數調用都被轉換成其他的東西,所以堆棧幀丟失(因爲沒有調用產生,因此沒有堆棧幀)。
爲什麼缺少符號可能會導致錯誤?編輯後仍然沒有意義。 – COMer 2010-09-15 12:46:24
有沒有辦法知道在兩個斷點之間執行了多少行程序集? – COMer 2010-09-15 12:56:41
Konrad解釋說,源代碼中存在的函數之間的概念邊界在優化和內聯過程中可能會模糊。即使是無內聯,編譯器可能會生成可執行代碼,從多個不同的源代碼函數跳轉到一個位置,因此並不總是可以說「執行停在這個地址,所以在函數X中」。調用棧通常也會顯示函數參數,但是需要解釋:是通過bool,int,text,指針(指向什麼?)的值?在沒有符號信息的函數內部,你無法辨別。 – 2010-09-15 13:26:02
Microsoft爲大多數(如果不是全部)OS DLL提供了符號文件。如果您將Visual Studio配置爲加載它們,則可以避免調用堆棧顯示中丟失的堆棧幀問題。請參見本文的詳細信息: http://blogs.msdn.com/b/heaths/archive/2005/04/27/412764.aspx
這http://stackoverflow.com/questions/3717988/why-does-the-debugger-need-symbols-to-reconstruct-the-stack/3718134#3718134可能幫助爲什麼。 – 2010-09-15 14:58:38