2011-12-06 93 views
3

走出塊考慮此代碼:避免在Visual C++ 2008

std::vector<myObject*> veryLargeArray; 

for (int i = 0; i < veryLargeArray.size(); ++i) 
{ 
    param_type* currParams = veryLargeArray[i]->GetParams<param_type>(); 
    currParams->phi = /* some complex formula */; 
} 

我怎麼會介入該代碼,這樣我知道答案被存儲在phi之前在循環開始的另一次迭代這將有效摧毀currParams,並有機會在調試器中看到它的值?

我常常遇到這種情況,我的解決方案是重新編譯代碼,方法是在塊末尾放置一個虛擬變量,然後我將中斷通過值數組,有時可能會很大,以至於我可以看到存儲了什麼值,或者可能需要額外的工作才能將存儲的param_type轉換爲正確的對象。這兩種解決方案都不理想,因爲第一個引入了警告(將其視爲錯誤,在這種情況下,我必須設置每個文件規則)以及重新編譯代碼,這兩種方法我都想避免,而第二種方法浪費時間。

+1

¤在分配上放置一個斷點,然後逐步完成。或者如果Visual C++支持,但是在右大括號處有斷點。雖然我從來沒有用過,但我相信你可以在斷點處添加一個* data condition *,例如您感興趣的「i」的某些特定值 - 請查看。乾杯&hth。, –

+0

沒有很好的解決方案,我知道。在這種情況下,我在機器代碼中設置了一個斷點。 –

+1

@ AlfP.Steinbach,所有優秀的解決方案,你一定能夠在VS中使用它們。爲此,我將補充一點,你可以將一個動作與一個斷點關聯起來,該斷點將在每次迭代中將「phi」的值寫入調試輸出。 – shambulator

回答

0

您可以聲明一個在循環之外聲明的變量,以在迭代之間存儲您的值,並在右括號上設置斷點。

std::vector<myObject*> veryLargeArray; 

int inspector; // assuming currParams->phi is int, change type accordingly 
for (int i = 0; i < veryLargeArray.size(); ++i) 
{ 
    param_type* currParams = veryLargeArray[i]->GetParams<param_type>(); 
    currParams->phi = /* some complex formula */; 
    inspector = currParams->phi; 
} 
+0

是的,當然,但這需要重新編譯,這正是我想要避免的,也可能會污染代碼。 – Samaursa

1

在右括號處設置斷點。打開斷點窗口(Ctrl + D,B)並在斷點列表中選擇斷點。右鍵單擊並選擇「條件」。在條件對話框中輸入「i == veryLargeArray.Size() - 1」。 Ok對話框和F5 ;-)