我有一个简单的代码:
#include "stdafx.h"
#include <iostream>
void foo()
{
int* p = 0;
*p = 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << "123";
foo();
std::cout << "456";
return 0;
}
默认调试Visual Studio设置。调试 - &gt;例外 - &gt;全部重置。
在调试配置中运行此代码后的结果 - 我在exc.exe中的0x77d315de(ntdll.dll)处获得异常未处理异常:0xC0000005:访问冲突写入位置0x00000000。 VS打开文件 ostream ,指针停留在这里:
_Ostr.setstate(_State);
return (_Ostr);
} <--
堆栈追踪:
ntdll.dll!_ZwRaiseException@12() + 0x12 bytes
ntdll.dll!_ZwRaiseException@12() + 0x12 bytes
exc.exe!std::operator<<<std::char_traits<char> >(std::basic_ostream<char,std::char_traits<char> > & _Ostr={...}, const char * _Val=0x00000000) Line 808 + 0xf bytes C++
> exc.exe!wmain(int argc=0x00000001, wchar_t * * argv=0x00164810) Line 14 C++
exc.exe!__tmainCRTStartup() Line 552 + 0x19 bytes C
exc.exe!wmainCRTStartup() Line 371 C
kernel32.dll!@BaseThreadInitThunk@12() + 0x12 bytes
ntdll.dll!___RtlUserThreadStart@8() + 0x27 bytes
ntdll.dll!__RtlUserThreadStart@8() + 0x1b bytes
如果我在Debug中设置了“Thrown”复选框 - &gt; Win32例外 - &gt; C0000005 Visual Studio停在正确的位置。
我的同事拥有相同的Visual Studio,Windows 7 x64和相同的硬件。但他的VS在不改变异常设置的情况下停在正确的位置。
我的Visual Studio设置有什么问题?
最大的问题 - 使用.net异常的行为也不典型。此时在调试模式下VS几乎忽略了所有异常。看起来我有全局异常过滤器并且处理了所有异常。程序可以在发布模式下运行并显示对话框Catel mvvm toolkit向我发送垃圾邮件,但有关未注册的模型和文件系统异常的例外情况。
任何想法,如何在不设置“Thrown”复选框的情况下修复它。
[编辑]
好的,我发现了一些奇怪的东西。更改Debug后 - &gt;例外情况我停在了异常行。但如果我按继续我要去ostream文件。看起来像VS debuger默认按“继续”。
[编辑]
First-chance exception at 0x012514cf in exc.exe: 0xC0000005: Access violation writing location 0x00000000.
Unhandled exception at 0x773515de (ntdll.dll) in exc.exe: 0xC0000005: Access violation writing location 0x00000000.
这就是我在输出中看到的东西。只有一个例外。看起来异常是以某种方式处理的,然后在其他地方被抛出。
答案 0 :(得分:0)
通常的嫌疑人:.ncb
文件或.pdb
或其他任何损坏的文件。尝试擦除所有本地文件( solutionname .suo
, solutionname .ncb
, projectname.anything .user
以及中间和输出目录中的所有内容)并检查它是否有帮助。