Windows 7 64 位、Visual Studio 2010、控制台 C++ 应用程序、Win32 调试配置:
#include “stdafx.h” int _tmain(int argc, _TCHAR* argv[]) { 字符* p = NULL; *p = 1; 返回0; }
开始调试。显然,我收到此错误消息:
test.exe 中 0x77d915de 处未处理的异常:0xC0000005:访问冲突写入位置 0x00000000。
我选择 Debug 并看到以下堆栈:
ntdll.dll!77d915de() [下面的帧可能不正确和/或丢失,没有为 ntdll.dll 加载符号] ntdll.dll!77d915de() ntdll.dll!77d8014e() msvcr100d.dll!_heap_alloc_dbg_impl(unsigned int nSize, int nBlockUse, const char * szFileName, int nLine, int * errno_tmp) Line 504 + 0xc bytes C++ >ffffffff()
调试器 __finally
在 dbgheap.c 中在线中断。堆栈已损坏,堆栈*p = 1
中缺少行。输出窗口:
'test.exe':已加载 'C:\tmp\test\Debug\test.exe',已加载符号。 “test.exe”:已加载“C:\Windows\SysWOW64\ntdll.dll”,找不到或打开 PDB 文件 “test.exe”:已加载“C:\Windows\SysWOW64\kernel32.dll”,找不到或打开 PDB 文件 “test.exe”:已加载“C:\Windows\SysWOW64\KernelBase.dll”,找不到或打开 PDB 文件 “test.exe”:已加载“C:\Windows\SysWOW64\msvcr100d.dll”,已加载符号。 test.exe 中 0x010f13a8 处的第一次机会异常:0xC0000005:访问冲突写入位置 0x00000000。 test.exe 中 0x77d915de 处未处理的异常:0xC0000005:访问冲突写入位置 0x00000000。
现在,如果我在 x64 Debug 配置中运行相同的程序,一切正常 - 调试器会中断*p = 1
。如何正确调试 Win32 程序?