2010-04-15 73 views
0

我正在使用VS2010 Ultimate。 擁有代碼:關於VS2010中斷點的問題C++

//file IntSet.h 
#include "stdafx.h" 
#pragma once 
/*Class representing set of integers*/ 
template<class T> 
class IntSet 
{ 
private: 
T** myData_; 
std::size_t mySize_; 
std::size_t myIndex_; 
public: 
#pragma region ctor/dtor 
explicit IntSet(); 
virtual ~IntSet(); 
#pragma endregion 
#pragma region publicInterface 
IntSet makeUnion(const IntSet&)const; 
IntSet makeIntersection(const IntSet&)const; 
IntSet makeSymmetricDifference(const IntSet&)const; 
void insert(const T&); 

#pragma endregion 
}; 

//file IntSet_impl.h 
#include "StdAfx.h" 
#include "IntSet.h" 

#pragma region ctor/dtor 
template<class T> 
IntSet<T>::IntSet():myData_(nullptr), 
    mySize_(0), 
    myIndex_(0) 
{ 
} 

template<class T> 
IntSet<T>::~IntSet() 
{ 
} 
#pragma endregion 

#pragma region publicInterface 
template<class T> 
void IntSet<T>::insert(const T& obj) 
{//BREAKPOINT---------------------------<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
/*IF I SET A BREAKPOINT HERE AND AFTER THAT I CHANGE SOMETHING IN THE BODY 
    I'M GETTING MSG SAYING THAT THE BREAKPOINT WILL NOT CURRENTLY BE HIT, AFTER I REBUILD 
    THE BREAKPOINT IS VALID AGAIN*/ 

/*Check if we are initialized*/ 
if (mySize_ == 0) 
{ 
    mySize_ = 1; 
    myData_ = new T*[mySize_]; 
} 
/*Check if we have place to insert obj in.*/ 
if (myIndex_ < mySize_) 
{ 
    myData_[myIndex_++] = new T(obj); 
    return; 
} 

/*We didn't have enough place...*/ 
T** tmp = new T*[mySize_];//for copying old to temporary basket 
std::copy(&myData_[0],&myData_[mySize_],&tmp[0]); 
delete myData_; 
auto oldSize = mySize_; 
mySize_ *= 2; 
myData_ = new T*[mySize_]; 
std::copy(&tmp[0],&tmp[oldSize],&myData_[0]); 
myData_[myIndex_] = new T(obj); 
++myIndex_; 
} 
#pragma endregion 

標記爲斷點見臨客。 謝謝。

+5

您的標題可能會使用一些改進... – ChristopheD 2010-04-15 18:32:28

+1

似乎並不像一個錯誤...但它不是最佳的方式... VS不能正確地編譯背景...... – 2010-04-15 18:32:56

+2

是很多問號。但是,這個屏幕代碼應該是一個錯誤?你忘了提問。 – jalf 2010-04-15 18:33:16

回答

5

如果在程序運行時更改代碼,代碼將不再匹配編譯的代碼,因此調試器(通常)無法管理斷點,直到程序停止並用新源重建。

在某些情況下,Visual Studio支持編輯和繼續調試,您可以在調試器在斷點處停止時編輯文件,然後在恢復時重新編譯該代碼並使用修改後的代碼繼續。

+0

是的,但我在調試器運行時沒有更改代碼。 – 2010-04-15 18:34:10

+0

由於所有人都關閉了這個功能,我無法發佈*正確*答案。我想所有你看到的是,斷點工具提示只是不同步,因爲後臺編譯器還沒有完全趕上你的變化。我已經看到這種情況發生在很多地方,斷點圖標讓我覺得它不起作用,但是一旦我開始調試,它會再次變成一個實心的圓,它實際上會工作。我只是忽略它,並認爲它是一個Visual Studio錯誤。 – Jaxidian 2010-04-15 18:53:37

+0

@Jaxidian感謝您的回答,但在我的情況下,它只是跳過這個斷點(不要進入fnc主體)。 – 2010-04-15 19:13:37