我正在尋找如何通過向我的應用程序添加代碼來幫助調試的提示。一個例子,以便它變得更加清晰:爲了檢測由shared_ptrs持有的懸掛對象,我創建了一個跟蹤器類,使我可以跟蹤多少個對象處於活動狀態以及最初創建的位置,這是然後這樣使用:編碼便於調試
class MyClass {
TRACK_THIS_TYPE(MyClass);
};
boost::shared_ptr<MyClass> myObj(new MyClass);
TRACK_THIS_OBJECT(myObj);
其中TRACK_THIS_TYPE(t)是一個宏,可以確保我得到(有多少對象已經被創建和計數)的實例計數爲一類和TRACK_THIS_OBJECT是一個宏店該對象創建的文件和行以及weak_ptr與該對象一起使用。
這使我可以檢測懸掛對象以及它們在哪裏創建。它不允許我找出哪些對象將shared_ptr保存到我的對象,這可能是對上述的改進。我想可以創建一個類似於TRACK_THIS_PTR(T)的宏來存儲文件和行,以創建shared_ptr實例。
另一個例子是舊
assert(condition && "My descriptive text");
,可以讓你直接把有意義的評論到斷言。
有沒有人有收集統計數據,自動堆棧跟蹤,跟蹤對象/指針/資源,死鎖/飢餓或其他線程問題檢測,確保異常處理某處,文檔幫助或類似的任何整潔的C++技巧?任何事情都是真的,無論是有助於防止錯誤的東西,還是事後有所幫助的東西。
編輯:除了對此問題的回覆外,我還收到有關google-glog作爲日誌記錄實用程序的提示。
小心與斷言和副作用!它可以在部署/調試時更改您的行爲(假定您爲部署時間構建刪除了斷言)。 – 2010-01-14 13:11:01
你可以舉一個副作用的例子嗎? – 2010-01-14 13:14:32
這是一篇關於編寫Assert宏的大文章,並且可能是一般的宏.. http://cnicholson.net/2009/02/stupid-c-tricks-adventures-in-assert/ – 2010-01-14 14:05:02