我写的一个小工具(用C++编写)昨天突然崩溃了(之前使用了100多小时都没有问题),虽然我通常不这样做,但当时我感到有些冒险,想尝试了解一下这个问题。于是我决定进入事件查看器,看看Windows记录了关于崩溃的什么信息:
Faulting application StraightToM.exe, version 0.0.0.0, time stamp 0x4a873d19
Faulting module name : StraightToM.exe, version 0.0.0.0, time stamp 0x4a873d19
Exception code : 0xc0000005
Fault offset : 0x0002d160,
Faulting process id: 0x17b4
Faulting application start time: time 0x01ca238d9e6b48b9.
我的问题是,这些东西各自代表什么意思,我该如何使用它们来调试我的程序?目前我已经了解到异常代码描述了错误,0xc0000005表示内存访问冲突(尝试访问未拥有的内存)。我特别想知道以下内容的更多信息:
- 故障偏移量是什么意思?它代表文件中出现错误的位置,还是代表汇编代码中出现错误的'行'?知道故障偏移量后,我该如何使用像OllyDbg这样的程序找到导致错误的相应汇编代码?或者 - 更好的办法 - 是否可以(轻松地)确定C++源代码中哪一行代码导致了此错误?
- 时间戳显然对应于崩溃时的32位UNIX时间,但64位应用程序启动时间是什么意思?如果时间戳为32位,为什么是64位?
谢谢您提前。
0xc0000005
并不是“访问被拒绝”,而是“发生了访问冲突”。代码正确,但设备错误。在Windows中,“访问被拒绝”的代码是5,对应的16进制码是0x80070005
,通常被缩写为0x00000005
。 - niemiro