【发布时间】:2013-09-20 20:24:24
【问题描述】:
if ((!m_pMediaPage->PageLayer() || !m_pMediaPage->LoadState()) &&
!m_pMediaPage->m_bRequestList)
{
GetListInfo();
m_pMediaPage->m_bRequestList = TRUE;
}
当所有值为 0 时,GetListInfo() 不会被执行。
PageLayer() 和 LoadState() 返回整数,m_bRequestList 是一个整数。
基本上改写成这样:
if ((!0 || !0) && !0) -or- if ((1 || 1) && 1)
我只能假设 if 语句所评估的值与调试器所看到的并不完全一样。
我正在使用 Visual Studio 2005 并在第 1 行和第 4 行放置断点以检查值并查看它是否执行到 if 语句中。我不确定如何调试它。
就像我说的,调试器在断点 1 处查看的 3 个值中的每一个都是 0。
.h 中的函数:
int PageLayer() {return m_iCurrentLayer;} - protected
BOOL LoadState() {return m_bLoadDone;} - protected
布尔值:
typedef int BOOL;
【问题讨论】:
-
然后您使用调试器逐步检查并确认您获得了预期的返回值?您已经尝试预先捕获所有的值,以便在 if 之前看到它们?
-
我单步执行是,即使在重复继续 (F5) 之后,它也会以相同的值返回到同一点,并且不会进入 if 语句。我没有尝试在 if 语句之外捕获它们,但我不明白为什么它们不会与调试器声称的值一起打印出来。不过我会试一试。
-
在断点 1 处尝试单步执行方法,使用 F10 验证两个方法的返回值。
-
@Enigma 你可以进入
LoadState的事实证明事情并不像你说的那样。如果PageLayer返回零,那么您的程序甚至不会调用LoadState。在表达式A || B中,如果 A 为真,则 B 不会被计算。 -
@john:我应该澄清一下。我没有进入您提到的功能,而只是查看将返回的值。
标签: c++ debugging if-statement visual-studio-2005 logic