c ++调试器在崩溃时停在错误的位置,VS10 win7

时间:2016-06-26 14:52:52

标签: c++ debugging callstack

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

#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()  

非常感谢, 叶夫

3 个答案:

答案 0 :(得分:0)

您的代码已损坏。  当您通过它进行书写时,指针不会指向有效的int。这种未定义的行为和您的编译器可能会生成它想要的任何内容。 调试器中的堆栈跟踪没有意义是无关紧要的,因为没有办法知道会发生什么 - 这就是 undefined 行为的本质。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我找到了我在here

中寻找的答案

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

你可以通过以下方式禁止AVX:

bcdedit /set xsavedisable 1

重新启动计算机