Куча отладки из языка С++
Обновлен: Ноябрь 2007
Этот раздел применим к:
Выпуск |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Экспресс-выпуск |
![]() |
![]() |
Только машинный код |
![]() |
Standard |
![]() |
![]() |
Только машинный код |
![]() |
Pro и Team |
![]() |
![]() |
Только машинный код |
![]() |
Обозначения:
![]() |
Применяется |
![]() |
Неприменимо |
![]() |
Команда или команды скрытый по умолчанию. |
В языке C++ можно непосредственно вызвать отладочную версию оператора new или создать макросы, заменяющие оператор new в режиме отладки, как показано в следующем примере.
Замена оператора "new"
/* MyDbgNew.h
Defines global operator new to allocate from
client blocks
*/
#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_CLIENTBLOCK
#endif // _DEBUG
/* MyApp.cpp
Compile options needed: /Zi /D_DEBUG /MLd
* or use a
* Default Workspace for a Console Application to
* build a Debug version
*/
#include "crtdbg.h"
#include "mydbgnew.h"
#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif
int main( ) {
char *p1;
p1 = new char[40];
_CrtMemDumpAllObjectsSince( NULL );
}
Отладочная версия оператора delete работает со всеми типами блоков и не требует изменений в программе при компиляции версии выпуска.