我写了一个c ++程序,当我使用调试模式时,
我将一个指针类型变量(比如m_pdummy
)放入监视列表中,但它显示“bad ptr”;
如果我展开这个指针(通过单击名称左边的“+”)并想要在此指针下看到其他变量,则所有变量都显示“表达式无法评估”;
然而,在我的代码中,我写了一些输出内容,例如:
CString str;
DWORD d1;
d1 = m_pdummy->m_wgear;
str.Format("%d");
MessageBox(str);
然后消息框显示正确的值;
但如果我将m_pdummy,d1,str拖到监视列表中,他们都会说“表达式无法评估”或“符号未找到”;但这是不可能的,因为消息框可以显示值;
那么这里有什么问题?!
最好的问候,阅读本文, 谢谢!
马森
答案 0 :(得分:1)
可能是你在错误的堆栈框架中。您列出的那些变量仅根据其存储持续时间而存在。如果你 那个持续时间(例如,在输入他们的功能之前或离开之后),该变量就不存在了。
示例,假设你有这个功能(左边的行号):
20
21 int dbl (int x) {
22 int y = x + x + x;
23 y -= x;
24 return y;
25 }
26
x
的持续时间仅限21
行至25
(且y
为22
至25
)。任何在该持续时间之外观察变量的尝试都可能会导致您看到的消息。
对于对象也是如此,除非已实例化对象,否则您将无法看到成员变量。
另一种可能性是,即使对象已经实例化,您也可能需要全名,例如myObject->m_pDummy
。
他们根据有限的可用信息进行猜测,但这是我要研究的第一件事。
答案 1 :(得分:0)
也许您正在调试的代码不是正在运行的代码,或者VS Compiler优化您的代码,因此某些代码不再存在。
在前者的情况下,无法监视断点和调试值,您应该检查与调试代码匹配的代码。当我向COM服务器注册一个'错误的'时,我想出了这个
对于后者,您应该关闭优化选项。希望这会对你有所帮助。