windows 分析msvcr80.dll中的应用程序故障,故障地址0x00008aa0
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1634162/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Analyzing application fault in msvcr80.dll, fault address 0x00008aa0
提问by russilwvong
I'm debugging an intermittent problem in which an application (created using C++ in Visual Studio 2005) is faulting. The event log provides the following information:
我正在调试应用程序(在 Visual Studio 2005 中使用 C++ 创建)出现故障的间歇性问题。事件日志提供以下信息:
faulting module msvcr80.dll
version 8.0.50727.1433
fault address 0x00008aa0
I did a Google search and found many other examples of applications crashing with this particular fault address, but no indication of what it means.
我进行了 Google 搜索,发现了许多其他应用程序因此特定故障地址而崩溃的示例,但没有说明它的含义。
Is there any way to find out what msvcr80.dll is doing at this address?
有什么办法可以找出 msvcr80.dll 在这个地址做什么?
I tried attaching to a running instance of the application from Visual Studio to see what code is located at 0x00008aa0 -- but there doesn't seem to be anything there!
我尝试从 Visual Studio 附加到正在运行的应用程序实例,以查看位于 0x00008aa0 处的代码——但那里似乎没有任何内容!
More generally, given an address somewhere in a Windows DLL, is there a way to figure out what the code is doing?
更一般地说,给定 Windows DLL 中某处的地址,有没有办法弄清楚代码在做什么?
采纳答案by Ana Betts
Windows will never map anything to addresses lower than 0x10000, so you are definitely AV'ing.
Windows 永远不会将任何内容映射到低于 0x10000 的地址,因此您肯定是在进行 AV'ing。
回答by csl
Googling myself, someone suggested using dependency walkerto find out which module you're using that is directly dependent on msvcr80.dll -- since you are using VS 2005.
自己在谷歌上搜索,有人建议使用Dependency walker找出您正在使用的直接依赖于 msvcr80.dll 的模块——因为您使用的是 VS 2005。
That might give you a clue where to start isolating the bug.
这可能会为您提供从何处开始隔离错误的线索。
回答by u109919
Address this low usually indicates a null pointer access violation. The offset of the member access accessed to the base pointer is 8aa0. Looks like a pretty large object. I would suggest you add null-asserts when you dereference pointers to objects of large data type.
地址这么低通常表示空指针访问冲突。访问基指针的成员访问的偏移量为8aa0。看起来像一个相当大的物体。我建议您在取消引用指向大数据类型对象的指针时添加空断言。
回答by Eugene
You can try to use Microsoft debug symbols, in this case you will see normal function name instead of address.
您可以尝试使用 Microsoft 调试符号,在这种情况下,您将看到正常的函数名称而不是地址。
In VS2005 you should do:
在 VS2005 中你应该这样做:
- Go to Tools -> Options -> Debugging -> Symbols
- Insert http://msdl.microsoft.com/download/symbolsas a symbol location
- Attach VS to your app instance and repeat the crash
- 转到工具 -> 选项 -> 调试 -> 符号
- 插入http://msdl.microsoft.com/download/symbols作为符号位置
- 将 VS 附加到您的应用程序实例并重复崩溃