1

Windows 7 64 ビット、Visual Studio 2010、コンソール C++ アプリケーション、Win32 デバッグ構成:

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    char* p = NULL;
    *p = 1;
    0 を返します。
}

デバッグを開始します。明らかに、次のエラー メッセージが表示されます。

test.exe の 0x77d915de で未処理の例外: 0xC0000005: アクセス違反の書き込み場所 0x00000000。

[デバッグ] を選択すると、次のスタックが表示されます。

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) 行 504 + 0xc バイト 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 デバッグ構成で同じプログラムを実行すると、すべて問題ありません。デバッガーが行で中断します*p = 1。Win32 プログラムの正しいデバッグを取得するにはどうすればよいですか?

4

1 に答える 1

3

Debug->Exceptions->win32 Exception->c0000005 Win32 Exceptions http://msdn.microsoft.com/en-us/library/038tzxdw(v= vs.100).aspx

*p = 1; 
00041375 mov eax,dword ptr [p]
00041378 mov byte ptr [eax],1

test2.exe の 0x00041378 での初回例外: 0xC0000005: アクセス違反書き込み場所 0x00000000

于 2012-12-13T13:31:23.480 に答える