2016-12-30 48 views
3

我目前正在努力調試下面的代碼部分。我使用VS2015社區版在Windows 10C++ VS調試器轉移行爲?

[(BR)]是一個斷點

以下是我的代碼(瘦身)版本。我基本上已經嵌套循環,從所有gameObjects中提取所有點(X & Y座標)。

正如你所看到的,我設置了兩個斷點。

我打了調試按鈕,它停在第一個斷點 - 成功。重要的局部變量counterVertices爲零。太好了。

然後我繼續打。它會三次出現相同的斷點。

然後我到了第二個斷點。 counterVertices顯示零。爲什麼?

int counterVertices = 0; 
    int counterIndices = 0; 
    int beginningOfPolygon = 0; 
    //GetData 
    for (auto& it : this->gameObjects) { //Iterate over all gameObjects 
     beginningOfPolygon = counterIndices; 
     for (int i = 0; i < it->getOutline().getNumber(); i++) { //Iterate over all points of the gameObject 
      [(BR)]this->vertices[counterVertices] = it->getRenderPoint(i).x; 
      counterVertices++; 
      this->vertices[counterVertices] = it->getRenderPoint(i).y; 
      counterVertices++; 
      [(BR)]if (this->vertices[counterVertices-2] == this->vertices[counterVertices-1] && this->vertices[counterVertices-1] == 0.0f) { 
       cout << "A point on 0/0." << endl; 
      } 
      this->vertices[counterVertices] = 0.0f; 
      counterVertices++; 
      //Add Line to draw 
      this->indices[counterIndices * 2] = counterIndices; 
      this->indices[(counterIndices * 2) + 1] = counterIndices + 1; 
      counterIndices++; 
     } 
     this->indices[(counterIndices * 2) - 1] = beginningOfPolygon; 

    } 

我完全失去了,因爲這甚至不是我想要在第一時間解決,而是就死在試圖找出在我原來的問題的問題。

已經感謝您的時間

PS:我有整個事情截圖和過程是重新創建。我可以清理並重建解決方案,重新啓動並執行後空翻。調試行爲不會改變。

PPS:該程序的行爲/工作方式表明counterVertices正確增加,但調試器信息與此相矛盾。

+0

您是否嘗試過從第一個斷點邁向而不是繼續,看看會發生什麼?我的第一個想法是可能會發生一個異常(如無效索引),它正在try/catch中被捕獲,並將執行從循環中拉出。或者大衛布拉德利剛纔建議的。 – Dronz

+0

是您的源代碼與您的可執行文件同步嗎? –

+0

一步向前邁出正常的一步。繼續前進導致「跳回」?到第一個斷點的路線。我沒有異常處理,也沒有多線程。沒有嘗試/抓住。 – celphy

回答

4

確保您關閉了優化。優化確實會使調試變得困難,因爲值將被保存在寄存器中,並且只有在需要時纔會被存儲。而代碼流可能非常不直觀。