【问题标题】:Visual studio show wrong location for SEH ExceptionVisual Studio 显示 SEH 异常的错误位置
【发布时间】:2012-10-03 08:03:13
【问题描述】:

我有一个简单的代码:

#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 设置。调试 -> 异常 -> 全部重置。

在调试配置中运行此代码后的结果 - 我在 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 -> Win32 Exceptions -> C0000005 Visual Studio 中将复选框“Thrown”设置在正确的位置。

我的同事拥有相同的 Visual Studio、Windows 7 x64 和相同的硬件。但是他的 VS 停在正确的地方,没有改变异常设置。

我的 Visual Studio 设置有什么问题?

最大的问题 - .net 异常的行为也不典型。此时在调试模式下,VS 几乎忽略了所有异常。看起来我有全局异常过滤器并且所有异常都得到了处理。程序可以在发布模式下运行并显示对话框 Catel mvvm 工具包向我发送关于未注册模型和文件系统异常的异常。

任何想法,我如何在不设置“Thrown”复选框的情况下修复它。

[编辑]

好的,我发现了一些奇怪的东西。更改 Debug -> Exceptions 后,我在异常处停止。但是,如果我按继续,我将转到 ostream 文件。看起来 VS 调试器默认按“继续”。

[编辑]

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.

这就是我在输出中看到的。只有一个例外。看起来异常以某种方式处理,然后在其他地方抛出。

【问题讨论】:

  • 很难解释。除此之外,我们没有查看真正的代码。 16行代码的程序中没有“第17行”。
  • 您是否以某种方式在调试版本中启用了优化?
  • 更新了堆栈跟踪。行号现在是正确的。

标签: c++ exception location seh


【解决方案1】:

通常的嫌疑人:.ncb 文件或.pdb 或任何已损坏的文件。尝试擦除所有本地文件(solutionname.suosolutionname.ncbprojectname.anything.user 以及中间和输出目录)并检查它是否有帮助。

【讨论】:

  • 不。一切都被抹去,创建了新项目——同样的问题。在另一个VS上没有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 2012-01-16
  • 2022-10-13
  • 1970-01-01
相关资源
最近更新 更多