2011-03-24 77 views

回答

1

_DEBUG是任意命名,但往往選擇,命令行符號指明瞭調試應在編譯的程序,額外的代碼和支持。這通常會導致額外的檢查,以幫助隔離編程缺陷,或者導致爲了開發者的利益而輸出額外的消息。

DEBUG_NEW尚不清楚,但它可能是new()的別名,它與new()delete()進行了額外驗證。

__FILE__是一個內置的預處理器符號,它的計算結果爲正在編譯的模塊的文件名。例如「MyProgram.cc」。

6

DEBUG_NEW僅僅是通常被定義爲一個宏:

#define DEBUG_NEW new(__FILE__, __LINE__) 
#define new DEBUG_NEW 

所以您隨時隨地使用new,還可以跟蹤哪些可以用來定位內存泄漏的文件和行號的你程序。

__FILE____LINE__predefined macros,它們分別評估您使用它們的文件名和行號!

閱讀下面的文章,其說明使用DEBUG_NEW與其他有趣的宏,很漂亮的技術:

A Cross-Platform Memory Leak Detector


Wikpedia

DEBUG_NEW是指技術, C++ 過載和/或重新定義運算符 新的和運算符刪除的順序到 攔截內存分配和 解除分配調用,從而調試內存使用的 程序。 經常 涉及定義一個名爲 DEBUG_NEW宏,使新成爲 像新(_ FILE _,_ LINE _) 記錄上 配置文件/行信息。 Microsoft Visual C++在其Microsoft「 基礎類」中使用 此技術。有一些 方法來擴展此方法,以避免 使用宏重定義,而仍然 能夠顯示某些平臺上的文件/行 信息。這種 方法有許多固有的限制。它僅適用於C++,並且 無法捕獲像malloc這樣的函數的內存泄漏。但是,它可以使用起來非常簡單,並且與更多的 完整的內存調試器解決方案相比,速度更快。

0

__FILE__的一個常見用法是設計錯誤記錄功能。您可以一起使用__FILE____LINE__報告發生錯誤的確切源代碼位置。

我設計了異常庫和assert()類型的函數來記錄這些信息。一種這樣的用途記錄在here中。

編輯:另一個例子here

0

通常,makroses和預處理器命令的這種組合,在MFC projets使用,以跟蹤存儲器泄漏。它必須包含在你的源文件中,並且它的含義如下:

#ifdef _DEBUG#endif之間的所有內容只在編譯器的DEBUG模式下執行。

字符串:#define new DEBUG_NEW,表示只要您在代碼中使用新的操作符,它將被替換爲宏DEBUG_NEW。然後,當您執行對象轉儲時,DEBUG_NEW將允許您查明內存泄漏的來源。

字符串:#UNDEF THIS_FILEstatic char THIS_FILE[] = __FILE__; - 重新定義THIS_FILE的含義並記住當前的文件名和行號。

相關問題