Visual studio显示SEH异常的错误位置
Visual studio show wrong location for SEH Exception
我有一个简单的代码:
#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设置。调试->异常->全部重置。
在调试配置中运行此代码后的结果-i在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
如果我在调试->Win32异常->C0000005中设置复选框"抛出",Visual Studio将停止在正确的位置。
我的同事有相同的Visual Studio,Windows 7 x64和相同的硬件。但他的VS停在了正确的位置,没有改变异常设置。
我的Visual Studio设置有什么问题?
最大的问题-有.net异常的行为也不典型。此时,在调试模式下,VS几乎忽略所有异常。看起来我有全局异常过滤器,所有异常都得到了处理。程序可以在发布模式下运行并显示对话框Catel mvvm工具包向我发送关于未注册模型和文件系统异常的异常。
任何想法,我如何在不设置"抛出"复选框的情况下修复它。
[EDIT]
好的,我发现了一些奇怪的东西。在更改调试->异常之后,我在出现异常的行处停止。但如果我按Continue,我将转到ostream文件。看起来VS调试器在默认情况下按"继续"。
[EDIT]
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.
这就是我在输出中看到的。只有一个例外。看起来异常是以某种方式处理的,然后在其他地方抛出。
常见的可疑:.ncb
文件或.pdb
或其他文件已损坏。尝试擦除所有本地文件(solutionname.suo
、solutionname.ncb
、projectname.anything.user
以及中间目录和输出目录中的所有文件),并检查它是否有帮助。
- OpenGL 4.3 错误地将第 4 个纹理坐标映射到与第 3 个纹理坐标相同的位置
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 奇怪的Arduino C++编译错误取决于文件位置
- 我收到分段错误,但不了解分段错误发生的位置
- 访问特定阵列位置/索引时出现分段错误
- boost::p rogram_options 在指定意外的位置参数时不报告任何错误
- 快速排序;分段错误,但找不到位置?
- 在尝试使用CUDA分配内存时,我遇到了访问冲突写入位置错误
- 错误 在测试.exe 0x76C9FD62时出现未经处理的异常:Microsoft C++异常:内存位置0x006FF8
- 错误:内存位置的 std::length_error
- 处于默认参数位置的 Lambda 无法访问好友成员。这是编译器错误吗?
- 无法指出发生分段错误的位置
- 在 C 代码中调用 Python 函数时第三次出现访问冲突写入位置错误
- 目标提升::<library>已经有导入的位置 + 链接错误
- 如何使用 Poco Json 解析器确定输入文档中错误的位置?
- 在动态加载的位置无关的可执行文件中分离错误
- Visual studio显示SEH异常的错误位置
- 编译器运行时错误报告和错误位置
- 核心转储,但是找不到错误位置,有GDB的错误信息
- 如何使用精灵解析器获得错误位置