0

我写了一个 c++ 程序,当我使用调试模式时,我将一个指针类型变量(比如m_pdummy)放入监视列表,但它显示“bad ptr”;

如果我展开该指针(通过单击名称左侧的“+”)并想查看该指针下的其他变量,所有变量都显示“无法计算表达式”;

但是,在我的代码中,我写了一些输出内容,例如:
CString str;
DWORD d1;
d1 = m_pdummy->m_wgear;
str.Format("%d");
MessageBox(str);
然后消息框显示正确的值;

但是如果我将 m_pdummy, d1, str 拖到监视列表中,它们都说“无法评估表达式”或“找不到符号”;但这是不可能的,因为消息框可以显示值;

那么这里有什么问题呢?!

最好的问候谁读了这篇文章,谢谢!

马森

4

2 回答 2

1

可能是您在错误的堆栈帧中。您列出的那些变量仅根据它们的存储持续时间存在。如果您超出该持续时间(例如,在进入其功能之前或离开它之后),则该变量不存在。

例如,假设你有这个函数(左边的行号):

20
21    int dbl (int x) {
22        int y = x + x + x;
23        y -= x;
24        return y;
25    }
26

的持续时间x仅在21通过的行上25(并且y22通过25)。任何在该持续时间之外观察变量的尝试都可能会导致您看到的消息。

对象也是如此,除非对象已被实例化,否则您将无法看到成员变量。

另一种可能性是,即使对象被实例化,您也可能需要全名,例如myObject->m_pDummy.

它们是基于有限的可用信息的猜测,但这是我要研究的第一件事。

于 2011-06-09T06:51:23.893 回答
0

也许您正在调试的代码并不完全是正在运行的代码,或者 VS 编译器优化了您的代码,因此某些代码不再存在。
前者的情况下,无法查看断点和调试值,您应该检查与调试的代码匹配的代码。当我将 COM 服务器注册为“错误”的 dll 时,我想出了这个问题。
对于后者,您应该关闭优化选项。希望这会帮助你。

于 2011-06-09T07:59:54.393 回答