2011-03-24 45 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的含义并记住当前的文件名和行号。