2009-10-27 68 views
1

我正在調試一個間歇性問題,其中應用程序(使用Visual Studio 2005中的C++創建)出現故障。事件日誌提供了以下信息:分析msvcr80.dll中的應用程序故障,故障地址0x00008aa0

faulting module msvcr80.dll 
version 8.0.50727.1433 
fault address 0x00008aa0 

我做了谷歌搜索,發現的應用與此特定錯誤地址轟然許多其他的例子,但沒有意味着什麼指示。

有沒有什麼辦法找出msvcr80.dll在這個地址做了什麼?

我嘗試從Visual Studio附加到應用程序的運行實例,看看哪些代碼位於0x00008aa0 - 但似乎沒有任何東西!

更一般地說,給定一個Windows DLL中的某個地址,有沒有辦法找出代碼在做什麼?

+0

您是否嘗試過隔離問題代碼? – csl 2009-10-27 23:09:53

+0

感謝大家的回答。知道這可能是一個訪問違規是絕對有用的。不幸的是,它是一個非常大的應用程序,並且崩潰是間歇性的,所以進一步隔離它將會非常耗時。 – russilwvong 2009-11-12 18:58:25

回答

1

Windows永遠不會映射任何地址到低於0x10000的地址,所以你絕對AV'ing。

1

谷歌搜索自己,一個人在使用dependency walker找出哪些你使用模塊,直接取決於MSVCR80.DLL建議 - 因爲你正在使用VS 2005

這可能給你一個線索從哪裏開始隔離錯誤。

1

解決這個問題通常表示空指針訪問衝突。訪問基址指針的成員訪問的偏移量爲8aa0。看起來像一個很大的物體。我建議你在取消引用大數據類型對象的指針時添加空斷言。

0

您可以嘗試使用Microsoft調試符號,在這種情況下您將看到正常的函數名稱而不是地址。

在VS2005你應該做的:

  1. 選擇工具 - >選項 - >調試 - >符號
  2. 插入http://msdl.microsoft.com/download/symbols作爲一個符號位置
  3. 附加VS您的應用實例,並重復崩潰