2013-05-20 71 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在調試器返回,過一個額外的好處。

相關問題