“<address>”处的指令引用“<address>”处的内存。内存无法“读取”。</address> </address>

时间:2009-04-21 11:32:12

标签: c++ c winapi

一个c / c ++应用程序抛出该错误,如何开始调试(比添加print语句更好的想法)?

6 个答案:

答案 0 :(得分:6)

第二个地址是非常小的数字,如0x00000001还是0x00000000?如果是这样,你可能只是忘了初始化一个指针。

在任何情况下,标准的调试技巧都适用:通过注意问题的发生时间开始隔离问题,并从那里缩小范围。

答案 1 :(得分:2)

错误消息表明您正在使用Visual Studio进行开发。好吧,至少那是我在这个措辞中看到这个错误信息的唯一开发环境。

如果是这种情况,您可以使用内置的异常调试来捕获访问冲突并以此方式获取调用堆栈。

要在VC ++ 2003中执行此操作,我目前已打开,请转到Debug-&gt; Exceptions,打开'Win32 Exceptions',单击“c0000005访问冲突”并将“当抛出异常时”设置为“Break”进入调试器“。

答案 2 :(得分:2)

就像其他人所说的那样,如果这在开发机器上是可重现的,那么启动一个调试器并设置断点/逐步完成代码。

但是,如果在客户的计算机上发生这种情况并且调试器不可用,则可以使用SetUnhandledExceptionFilter并将信息写入日志文件来获取一些相同的信息(callstack,register等) ,或做一个小型转储。我怀疑callstack是最有用的起始位置,因此您可以使用处理程序中的一个StackWalk函数并写入日志文件。这至少需要一个映射文件或一组符号(PDB)用于该应用程序的构建。

答案 3 :(得分:1)

如果没有代码,很难提出任何建议。尝试使用调试器并在遇到问题之前在代码中设置断点。

答案 4 :(得分:1)

根据您的开发环境,您的程序的地图文件可能会有所帮助

答案 5 :(得分:0)

您可以使用GDB调试您的应用:http://www.gnu.org/software/gdb/

相关问题