windows - 使用WinDbg调试0xc000001d异常

标签 windows exception visual-studio-2015 windbg illegal-instruction

我正在尝试使用 WinDbg 查找“非法指令”异常 (0xc000001d) 的根本原因。 该项目是用VC++2015构建的。我从两次测试运行中获得了两次内存转储。

目前我发现以下内容对于这两个转储均成立:

  • 异常指向“movq mmword ptr [ecx], xmm0”指令
  • xmm0 包含零
  • 异常发生在对象构造函数中
  • 地址在 DS 内
  • 该地址属于看起来有效的堆条目
  • 指向正在构造的对象的地址,因此它似乎尝试将零放入看起来也有效的 obj.m_data 成员

我不知道该往哪里走,所以我希望得到任何指导。

更新:

...
movq    xmm0,mmword ptr [esi]
lea     ecx,[edi+94h]
movq    mmword ptr [ecx],xmm0 ; << this causes the exception

最佳答案

当操作系统处理 CPU 无法解码指令的故障时,会引发非法指令。如果 CPU 或操作系统不支持指令扩展,则可能会发生这种情况。 msdn : illegal instruction AVX 。在这种情况下,当 CPU 支持 AVX 但操作系统不支持时,msvc 2013 中的错误就会发生。

发生故障的 CPU 似乎不支持 SSE2,这可能是导致此问题的原因。

在我遇到AVX问题的情况下,当使用工具来识别是否使用了AVX时,有一个CPU测试,确定该工具不支持AVX(由Intel提供)。

我不知道 AMD 是否有工具,并且会对此类工具的工作持谨慎态度,因为可能缺少操作系统支持。

更新

如果操作系统不支持某个指令,为什么它会失败? AVX 指令就是一个例子,来自 wikipedia : AVX州。

AVX adds new register-state through the 256-bit wide YMM register file, so explicit operating system support is required to properly save and restore AVX's expanded registers between context switches.

对操作系统所需的工作或内存的任何更改可能需要明确的选择加入。对于 AVX,额外的寄存器改变了为上下文切换存储的数据量。

关于windows - 使用WinDbg调试0xc000001d异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44231673/

相关文章:

python - 如何通过引发异常来 pytest 一个 python 函数

visual-studio-2015 - 如何在 Visual Studio 2015 中设置代理

c# - 如何在 visual studio 2015 中查看 .NET Core 框架的源代码

java - 如何让我的 Java 应用程序在 Windows 中正常关闭?

windows - 如何将键盘和鼠标输入发送到 Windows 登录屏幕?

android - 唤醒锁在 Nexus 5 上不断抛出异常

c++ - 如何修改 C++ runtime_error 的 what 字符串?

windows - 如何使用批处理获取前景窗口?

c++ - 为什么 ConvertStringSidToSid 转换字符串 SID 失败?

.net - 如何修复 Visual Studio 2015 中的 DNX/DNVM?