c++调试器在崩溃时停止在错误的地方,VS10 win7

c++ debugger stops in wrong place on crash, VS10 win7

本文关键字:VS10 win7 崩溃 调试器 c++ 错误      更新时间:2023-10-16

这是我写的一个小程序,用来重现我得到的错误:

#include <assert.h>
int main(int argc, char **argv)
{
    int* nPtr = 0;
    *nPtr = 5;
    //assert(0 && "testing");
    //static int nZero = 0;
    //static float x = 5 / nZero;
    return 0;
}

调用堆栈是错误的,现在有方法可以重新跟踪错误。我编译没有优化在32位。PDB匹配exe.

这是我得到的调用堆栈:

ntdll.dll!76f615de()    
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
ntdll.dll!76f615de()    
ntdll.dll!76f5014e()    
msvcr100d.dll!_unlock(int locknum)  Line 375    C
003df930()  
cccccccc()  

谢谢,Evgeny

您的代码被破坏了。当您通过它写时,您的指针不指向有效的int。这是未定义的行为,编译器可能会生成它想要的任何东西。调试器中的堆栈跟踪没有意义是无关紧要的,因为没有办法知道会发生什么——这就是未定义行为的本质。

Int *p =0,这意味着p点0x00000000,它是不可访问的。所以你改变*p,它会导致拒绝

我找到了我在这里寻找的答案

简而言之,AVX在异常之后在调用堆栈中导致错误。

您可以通过以下方式关闭AVX:

bcdedit /set xsavedisable 1

重启电脑