Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Windbg分析转储时,我可以信任局部变量值吗?_C++_Debugging_Windbg - Fatal编程技术网

C++ 使用Windbg分析转储时,我可以信任局部变量值吗?

C++ 使用Windbg分析转储时,我可以信任局部变量值吗?,c++,debugging,windbg,C++,Debugging,Windbg,我看到了一些奇怪的事情,比如指针值改变了值0,或者在两次调用之间没有改变的有效值。与枚举值相同。这些值只是转发,没有修改的机会。转储文件是minidunp。我想是优化的构建吗?问题是CPU不处理变量,而是处理内存地址和寄存器。事实上,在发布版本中,一个寄存器可能被许多变量共享——当然,不是所有变量都同时共享。但是,如果调试器不能计算出寄存器中现在是什么变量,它可能会变得非常混乱。我想是优化的构建?问题是CPU不处理变量,而是处理内存地址和寄存器。事实上,在发布版本中,一个寄存器可能被许多变量共享

我看到了一些奇怪的事情,比如指针值改变了值0,或者在两次调用之间没有改变的有效值。与枚举值相同。这些值只是转发,没有修改的机会。转储文件是minidunp。

我想是优化的构建吗?问题是CPU不处理变量,而是处理内存地址和寄存器。事实上,在发布版本中,一个寄存器可能被许多变量共享——当然,不是所有变量都同时共享。但是,如果调试器不能计算出寄存器中现在是什么变量,它可能会变得非常混乱。

我想是优化的构建?问题是CPU不处理变量,而是处理内存地址和寄存器。事实上,在发布版本中,一个寄存器可能被许多变量共享——当然,不是所有变量都同时共享。但是,如果调试器无法计算出寄存器中现在是什么变量,它可能会变得非常混乱。

您可以使用dv/V来显示局部变量是否存在于寄存器中。 就像这里:

0:000>dv/v @ecx this=0x0018fe10


为了避免这种情况,您必须在编译时删除优化。

您可以使用dv/V来显示局部变量是否存在于寄存器中。 就像这里:

0:000>dv/v @ecx this=0x0018fe10


要消除这种情况,您必须在编译时删除优化。

在第3行,您的强制转换无效,并导致未定义的行为。另外,不要说++i+++i。在第3行,您的强制转换无效,并导致未定义的行为。另外,不要说++i+++i。这解释了值的变化,注册表是重用的。有没有办法克服这个问题?0:001>??这个;->类myClass*0xff7e5c8e!地址0xff7e5c8e->地址ff7e5c8e未在任何VAD中找到--。这是内存损坏或优化的结果?这个ptr值应该是有效的,我在转储中有堆信息,解释了值的变化,注册表被重用。有没有办法克服这个问题?0:001>??这个;->类myClass*0xff7e5c8e!地址0xff7e5c8e->地址ff7e5c8e未在任何VAD中找到--。这是内存损坏或优化的结果?这个ptr值应该是有效的,我在转储文件中有堆信息。这就是我需要的。我有办法确定var是否有效。谢谢。这就是我需要的。我需要一种方法来确定var是否有效。