出於調試的目的,我想找到一種方法如何自動跟蹤參與了我的設計變量的變化。C++變量變化監測
我想獲得的結果爲像每一個變量被分配時間的新值的printf的,但無需手動插入所有的printf。
這樣做的最好方法是什麼? 感謝
出於調試的目的,我想找到一種方法如何自動跟蹤參與了我的設計變量的變化。C++變量變化監測
我想獲得的結果爲像每一個變量被分配時間的新值的printf的,但無需手動插入所有的printf。
這樣做的最好方法是什麼? 感謝
嘗試爲他們寫一些代理類和重新賦值運算符。它colud具有指針或值的語義,但我更喜歡指針,因爲它很簡單。
template<class T>
struct proxy
{
//add const version
T & operator *()
{
std::cout << "access" << std::endl;
return val_;
}
T * operator ->()
{
std::cout << "access" << std::endl;
return &val_;
}
proxy<T> & operator = (T const & other)
{
std::cout << "access" << std::endl;
val = other;
return (*this);
}
private:
T val_;
};
這有混合的語義。如果你寫'代理
是的,但這是它應該的方式。 * i = x;代理服務器後面的賦值=) – kassak
創建要監視和確定適當的operator=
賦值運算符方法變量的新類:
template <class T>
class MonitoredVariable
{
public:
MonitoredVariable() {}
MonitoredVariable(const T& value) : m_value(value) {}
T operator T() const { return m_value; }
const MonitoredVariable& operator = (const T& value)
{
printf("Variable modified\n");
m_value = value;
return *this;
}
private:
T m_value;
}
用法示例:
MoniredVariable<int> x;
x = 42; // Will print "Variable modified"
當然,對於這有用,您必須在operator=
實現中包含相關信息,並且還必須重載其他算術賦值運算符如+=
,-=
等
yuk到printf:P – Caribou
調試器可以做到這一點。你需要在代碼中完成嗎? – jalf
否則(如果不是調試器方法)您需要確保使用訪問器,或者包裝所有變量,以便operator =,copy和其他分配方法觸發某些輸出。 – Caribou
請說你在用什麼IDE?我知道在Visual Studio中使用它的幾種方法。 –