2013-05-20 39 views
1

So..I'm测试与断言的函数:(pBola1的值是1)是否有可能看到在C++中返回的值?

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

使用简化的(变量|函数|类)名称作为示例代码通常是首选,因为它可以更容易阅读 – Legionair

回答

6

只需创建一个本地

cBola* pTemp = BomboTest.TreureBola(1); 
assert(pTemp==pBola1); 

你可以看看在dissasembly并检查返回注册表,但这似乎是大材小用。以上是正确的方法,其他人在未来遇到同样的问题时会感谢您。

5

你总是可以临时更改

assert(BomboTest.TreureBola(1)==pBola1); 

to`

auto tmp=BomboTest.TreureBola(1); 
assert(tmp==pBola1); 

,并放置一个断点在第一行。

1

我会写一个小包装围绕断言改用:

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在调试器返回,过一个额外的好处。

相关问题