【发布时间】:2011-09-11 10:56:13
【问题描述】:
我写了一个c++程序,当我使用调试模式时,
我将一个指针类型变量(比如m_pdummy)放入监视列表,但它显示“bad ptr”;
如果我展开该指针(通过单击名称左侧的“+”)并想查看该指针下的其他变量,所有变量都显示“无法计算表达式”;
但是,在我的代码中,我写了一些输出内容,例如:CString str;DWORD d1;d1 = m_pdummy->m_wgear;str.Format("%d");MessageBox(str);
然后消息框显示正确的值;
但是如果我将 m_pdummy, d1, str 拖到观察列表中,它们都说“无法评估表达式”或“找不到符号”;但这是不可能的,因为消息框可以显示值;
那么这里有什么问题?!
最好的问候谁读了这篇文章, 谢谢!
马森
【问题讨论】:
-
您是否开启了优化?你确定你处于调试模式吗?
-
是的,我处于调试模式,我使用 F10 运行下一步;优化会影响这些事情?!
-
考虑(假设每个语句都有自己的一行):
int foo(int x){ int y = x + 1; int z = y + 1; return z + 1; }。如果在优化时没有将其转换为int foo(int x){ return x + 3; },那么您将拥有一个非常愚蠢的编译器。现在考虑您开启了优化:没有y或z。 -
酷,从来不知道!所以如果我打开了优化,那么如果我打开反汇编窗口并没有看到行 y=x+1 和 z=y+1 的汇编代码是正常的?
-
是的。优化会重写您的代码,因此生成的汇编代码不再与您编写的完全匹配。但它仍然应该有相同的 result
标签: c++ visual-studio debugging watch