Okna dialogowe
klasa CDialog
|
|
-
-
MFC zawiera w sobie znaczne ułatwienia
śledzenia pracy programu
-
globalne funkcje, makra i
zmienne wykorzystywane wyłącznie podczas debugowania
-
własności podstawowej klasy
CObject
-
klasy wykorzystywane wyłącznie
podczas debugowania
-
Wszystkie udogodnienia
debugowania są włączane do programu, gdy jest zadeklarowana
stała preprocesora _DEBUG
-
Do Visual Studio jest dołączony
program Tracer umożliwiający jednoczesne debugowanie
wielu aplikacji, bardzo pomocny w przypadku śledzenia programu
wykorzystującego DLL
[początek strony]
-
-
ASSERT( booleanExpression
)
-
jeśli logiczna wartość
parametru makra jest równa FALSE następuje zatrzymanie pracy
programu i pokazanie komunikatu z możliwościami: Abort,
Retry, Ignore
-
kod w parametrze tego makra
zostanie dołączony do programu tylko jeśli jest
zadeklarowana stała _DEBUG (czyli nie zostanie w
wersji Release)
VERIFY( booleanExpression
)
-
jeśli jest zadeklarowana stała
_DEBUG działa dokładnie jak ASSERT
-
jeśli nie jest, kod w
parametrze makra jest wykonywany, ale nie jest sprawdzana
wartość logiczna warunku i nie pojawia się komunikat
-
ASSERT_KINDOF( classname, pobject )
-
sprawdzenie przynależności obiektu do klasy
-
to samo co: ASSERT( pobject->IsKindOf( RUNTIME_CLASS( classname )))
-
obiekt musi być z klasy pochodzącej z CObject
-
ASSERT_VALID( pobject )
-
obliczany jest wskaźnik i jeśli nie jest równy
NULL, to dla tego obiektu jest wołana metoda CObject::AssertValid
-
obiekt musi być z klasy pochodzącej z CObject
-
TRACE( exp )
-
jeśli flaga afxTraceEnabled jest
ustawiona, sformatowany komunikat trafia do wyjścia
debugowego
-
zmienna afxTraceFlags daje możliwości
sterowania szczegółowością komunikatów debugowych
-
możliwości formatowania komunikatu jak w
przypadku funkcji printf
-
jest ograniczenie 512 znaków na jeden
komunikat
-
TRACE0, TRACE1, TRACE2, TRACE3
-
#define new DEBUG_NEW
-
podczas każdego użycia operatora new
zapamiętywana jest nazwa pliku źródłowego i numer linii
kodu, gdzie ma miejsce alokacja
-
funkcja CMemoryState::DumpAllObjectsSince()
powoduje pokazanie informacji o alokacjach
-
w przypadku niezwalniania pamięci możliwe będzie
szybkie znalezienie miejsca alokacji
-
definicja ta musi być umieszczona po
ostatniej definicji IMPLEMENT_SERIAL
[początek strony]
-
-
afxDump
-
afxMemDF
-
afxTraceEnable
-
afxTraceFlags
-
AfxCheckError( SCODE sc )
-
AfxCheckMemory()
-
AfxDump( const CObject *pOb )
-
AfxDumpStack( DWORD dwTarget )
-
AfxEnableMemoryTracking( BOOL bTrack )
-
AfxIsMemoryBlock( const void *p, UINT nBytes, LONG *plRequestNumber )
-
AfxIsValidAddress( const void *p, UINT nBytes, BOOL bReadWrite )
-
AfxIsValidString( LPCSTR lpsz, int nLength )
-
AfxSetAllocHook( AFX_ALLOC_HOOK pfnAllocHook )
-
AfxDoForAllClasses
-
AfxDoForAllObjects
[początek strony]
-
-
CDumpContext
-
obsługuje diagnostyczne wyjście
-
w aplikacjach MFC jest
utworzony obiekt afxDump tej klasy, w większości
zastosowań jest on całkowicie wystarczający
-
wyjście jest wysyłane do
funcji API OutputDebugString
CMemoryState
-
pomaga wykryć niezwalnianie
pamięci (memory leaks), ale tylko w przypadku użycia
operatorów new i delete
-
sposób użycia:
- na początku sprawdzanego kodu utworzyć obiekt CMemoryState
i wywołać CMemoryState::Checkpoint
- na końcu sprawdzanego kodu utworzyć drugi obiekt CMemoryState
i wywołać tą samą metodę
- utworzyć trzeci obiekt tej klasy i wywołać CMemoryState::Difference
[początek strony]
|