所以..我正在使用断言测试函数:( pBola1的值为1)
assert(BomboTest.TreureBola(1)==pBola1);
BomboTest.TreureBola它是一个返回列表的随机数(在这种情况下必须返回1)的函数。
cBola* cBombo::TreureBola(int num)
{
int posicio_aleatoria;
posicio_aleatoria= rand() % (num);
return(Boles.TreureElement(posicio_aleatoria));
}
TreureElement它是一个函数,它返回一个动态列表的元素,知道你想要提取的元素的位置(在这种情况下返回'retorn',即1)
cBola* cLlista::TreureElement(int posicio)
{
int i;
cBola* recorreLlista;
cBola *retorn;
recorreLlista=primer;
retorn = primer;
i=0;
if (posicio == 0)
{
primer = (*primer).getSeguent();
}
else
{
// Busquem la posició //
while(i < posicio)
{
recorreLlista= retorn;
retorn = (*retorn).getSeguent();
i++;
}
(*recorreLlista).setSeguent( (*retorn).getSeguent() );
}
numElements--;
return retorn;
}
我不知道为什么但断言失败了。我可以看到TreureElement返回的值,因为我有指针'retorn',但我不知道TreureBola返回的值。有什么方法可以看到TreureBola在调试器中返回的值?
PD:我正在使用visual studio 2010
答案 0 :(得分:6)
只需创建一个本地
cBola* pTemp = BomboTest.TreureBola(1);
assert(pTemp==pBola1);
你可以查看dissasembly并检查返回注册表,但这看起来有点矫枉过正。以上是正确的方法,其他人会在将来遇到同样的问题时感谢你。
答案 1 :(得分:5)
您可以随时暂时更改
assert(BomboTest.TreureBola(1)==pBola1);
to`
auto tmp=BomboTest.TreureBola(1);
assert(tmp==pBola1);
并在第一行放置一个断点。
答案 2 :(得分:1)
我会在assert周围写一个小包装来代替:
template <typename T>
void compare(const T& lhs, const T& rhs)
{
if (lhs != rhs)
cout << "The values were not the same! " << lhs << " vs. " << rhs << endl;
assert(lhs == rhs);
}
这仍然会调用assert
,但首先你会得到一些(希望)有用的输出。
所以不要打电话:
assert(BomboTest.TreureBola(1)==pBola1);
你会打电话:
compare(BomboTest.TreureBola(1), pBola1);
这有一个额外的好处,你可以在这里放置一个断点,看看TreureBola在调试器中返回的内容。