Uwaganbsp; Ta Uwaga techniczna został napisany dla systemu Windows 3.1. Windows &NT implementuje większość tych funkcji. Podczas uruchamiania aplikacji w systemie Windows 3.1 (z biblioteki DLL Win32s), techniki te mogą być pomocne we debugowania. Windows 95 również implementuje i rozszerza funkcje niezawodności, wprowadzonych w systemie Windows 3.1. Wersja debugowania systemu Windows 95 jest, że najlepszym sposobem na zapewnienie aplikacja działa dokładnie.
Windows 3.1 jest znaczną poprawę Windows 3.0 w dziedzinie rozwoju aplikacji. Windows 3.1 zawiera szereg nowych funkcji, które zwiększają niezawodność aplikacji systemu Windows. Ta Uwaga techniczna opisuje korzystanie z tych funkcji w bibliotece MFC.
Funkcje te obejmują jądra debugowania, kontrola typów STRICT , diagnostyki i zarządzanie pamięcią i WINDOWSX.H ulepszenia.
Windows 3.1 debugowania jądra
Uwaga Ta sekcja ma zastosowanie jedynie do Microsoft Visual C++ wersji 1.5.
Testowanie aplikacji MFC z systemu plików wykonywalnych debugowania jest prawdopodobnie best thing, które można zrobić, aby upewnić się, że aplikacje są solidny i niezawodny. Debugowania wersje plików wykonywalnych systemu wykonać sortuje wszystkie użyteczne błędu sprawdzania dla Ciebie, informujący o ewentualne problemy z wiadomościami wyjściowe debugowania.
Najlepszym sposobem korzystania z systemu debugowania jest z dwóch maszyn: Maszyny do testowania i debugowania, który został zainstalowany system debugowania i maszyny dla rozwoju. Jednej maszynie, komputer badania należy zawsze uruchamiane z jądrem debugowania. Innego komputera, komputerze deweloperskim, należy uruchomić z jądra nie debugowania. Wyjście z jądra debugowania mogą być wysyłane do podstawowego komputera przez linię pseudomodemu. Jeśli masz tylko jednej maszynie, następnie należy pamiętać, aby uruchamiać jądro debugowania (występuje obniżenie wydajności nieznaczne). Wyjście z jądra debugowania mogą być routowane do DBWIN, narzędziem dołączonym Microsoft Visual C++ wersji 1.5. Ponadto okna programu Visual C++ dane wyjściowe będą otrzymywać dane wyjściowe, podczas uruchamiania pod debugera.
Sztuczka użyteczne dla pojedynczego komputera debugowanie jest umieszczenie kopii systemu i debugowania plików binarnych i symboli w oddzielnym katalogu i plików wsadowych, które skopiuj odpowiednie pliki do katalogu systemu Windows. W ten sposób można zakończyć pracę systemu Windows i i z powrotem szybkie przełączanie między debugowania i bez debugowania. Program instalacyjny wersji 1.5 Visual C++ będzie wybrać tę opcję, a następnie można przełączać się między debugowania i wersji bez debugowania systemu Windows z D2N.BAT i N2D.Pliki wsadowe BAT.
Jeśli nie są uruchomione z debugera lub terminalu debugowania, należy uruchomić aplikację DBWIN, co umożliwia wyświetlanie błędów i komunikatów ostrzegawczych produkowane przez system debugowania. Aplikacja ta jest dołączony do programu Visual C++ wersji 1.5.
Poniżej są niektóre typowe błędy programowania, które często pojawiają się w wysyłki aplikacji systemu Windows. Wiele z tych problemów może powodować losowe systemu UAEs i innych problemów w systemie Windows 3.0. Pliki binarne debugowania systemu pomoże Ci śledzenie problemów, takich jak:
Diagnostyka MFC
Ponadto Microsoft Foundation Classes dostarczany z zestawem funkcji niezawodności, które są kompilowane i połączone tylko w kompilacji debugowania biblioteki (warianty te biblioteki, kończąc miał "). Użycie tych funkcji w aplikacji można pisać i w klasach, które projektowania będzie znacznie poprawić runtime i wyłapywanie błędów czas kompilowania aplikacji. Poniżej przedstawiono te funkcje, ale wszystkie są udokumentowane w podręczniku Klasy Library Reference.
Każda klasa pochodzi od CObject w MFC implementuje funkcję zrzutu Państwa, które pozwala wyświetlić stan obiektu w formacie ASCII. Ta funkcja może być wywoływana przez obiekt debugera lub umieszczone w #ifdef _DEBUG /#endif fragmentów kodu. Funkcję Pomocnik AfxDump znajduje się w bibliotece debugowania tylko do tego celu. Jest wywoływana z jednego parametru, CObject *. Tej funkcji można wywołać z debugera do wydrukowania argument. Należy dostarczyć członkiem zrzutu dla klas, które można wdrożyć. Z AssertValid, użytkownik powinien najpierw jawnie wywołać klasy podstawowej zrzutu funkcji składowej. Dane wyjściowe zrzutu jest przesyłana do standardowych MFC CDumpContext, afxDump, która domyślnie aby oknie wyjściowych debugera lub do Twojego debugowania terminali. Za pomocą programu DBWIN do wyświetlania danych wyjściowych afxDump. Plik źródłowy, MFC\SRC\DUMPINIT.CPP zawiera informacje o tym, jak trasy afxDump do innego miejsca przeznaczenia.
Śledzenie, makra, który zachowuje się znacznie jak printf, tylko trasy wyjściowe w lokalizacji afxDump . Do wskazania miejsca kłopotliwe lub wyjątkowych w kodzie należy użyć instrukcji TRACE . Jak z innymi funkcjami niezawodności, Śledzenie ma sens jedynie w bibliotece debugowania i AutoRotation w kompilacji detalicznych. Biblioteki MFC zawiera szereg zbudowany w instrukcji TRACE śledzenia przepływu wiadomości. Więcej informacji na temat debugowania śledzenia zobacz technicznych Uwaga 7.
ASSERT jest kontrola czasu ważności oświadczenie. ASSERTs należy używać liberally całej programu. Każde miejsce masz komentarz do skutku:
/ / lpStr powinny mieć wartość NULL w tym momencie
należy zastępującą z assert run-time:
Assert(lpStr == null)
Kompilator nie może zrozumieć komentarz, ale można oszacować wyrażenia w makrze potwierdzenia. ASSERT oświadczenia mają żadnego skutku w kompilacji retails. Jeśli potrzebujesz informacji z ASSERT w kompilacji detalicznych, następnie użyć makra Sprawdź.
MFC obejmuje również alokatora rozległe diagnostyki pamięci. Alokator diagnostyki pamięci umożliwia sprawdzanie wolnego wszystkie zasoby pamięci podczas niektórych funkcji programu. Alokator diagnostyczne będą śledzić pliku źródłowego i linii liczba alokacji, więc jeśli używasz CMemoryState::DumpAllObjectsSince API, można zlokalizować wszelkie przydziały, które pozostają.
Domyślnie MFC będzie zrzutu wszystkie obiekty nie zwolniona przez program (jeśli istnieją) zanim program kończy działanie. Te dane wyjściowe można wyświetlić przez uruchomienie aplikacji w debugerze.
Kontrola typów w ŚCISŁYM Windows 3.1
Kontrola typów ŚCISŁE jest opcją, dostępnych w systemie WINDOWS.H nagłówka pliku. MFC domyślnie używa tych typów STRICT , i należy ich używać, jeśli tworzysz aplikację MFC. MFC nie obsługuje już budowania aplikacji bez ŚCISŁE definicje.
Typesafe powiązania i ŚCISŁYM
W języku C++ są dozwolone mają wiele funkcji o tej samej nazwie, tak długo, jak te funkcje mają różnych parametrów formalnych list. W celu uzyskania unikatowego łącze symbole, kompilator C++ będzie "udekorowania" tych nazw, korzystając z algorytmu, który koduje informacje dotyczące funkcji takich jak nazwa, liczbę i rodzaj parametrami formalnymi, wywołanie Konwencji, etc.
Ten nowo wygenerowanym nazwa jest używana jako symbol link zewnętrzny dla funkcji. To jest znane jako typesafe powiązania i duże korzyści C++. Ten przekręcenie nazwy nie ma zastosowania do funkcji w obrębie bloku "C" extern i dlatego wszystkich interfejsów API systemu Windows.H są takie bloku.
Typ ŚCISŁE sprawdzanie w systemie WINDOWS.H zwiększa bezpieczeństwo typu dla programów Windows reprezentują wszystkie inne uchwyty w systemie Windows, korzystając z różnych typów. Tak na przykład ŚCISŁE chroni użytkownika przed błędnie przechodzącą HPEN do rutynowych oczekiwano HBITMAP.
Ponieważ API systemu Windows znajdują się w extern "C" {} bloki, nie urządzone w sposób opisany powyżej. ŚCISŁE zmiany typów różne definicje TypeDef systemu Windows, aby były unikatowe (specjalnie go używa wskaźnika różnych typów do reprezentowania obsługis, które nie mogą być dowolnie konwertowane bez wyraźnego oddanych).
Jak można zauważyć, jeśli masz włączone w jednym pliku, ale nie w innym kontrola typów STRICT , kompilator C++ wygeneruje różnych link zewnętrzny symbole pojedynczą funkcję. Spowoduje to błędy w czasie łącze. W związku z tym zaleca się użycie typu ŚCISŁE sprawdzanie tylko c modułów, (które mogą kończyć się.C). Dodatkowo, ŚCISŁE jest, czasie kompilacji tylko opcja, więc po pomyślnie skompilowany kod korzyści ŚCISŁE są całkowicie zrealizowaną.
Jeśli są mieszanie ŚCISŁE i -kodSTRICT , musisz być świadom powiązania niespójności. Ogólnie wszystkie MFC programowania i wszystkie C++ powinno być wykonane z STRICT. Jeśli masz starszy kod C, dopuszczalne jest następnie nie przy użyciu STRICT.
Windows 3.1 WINDOWSX.H nagłówka pliku
Nowy z systemu Windows 3.1 i Win32 jest WINDOWSX.Plik nagłówka H, który obsługuje różne rozszerzenia styl programowania c dla programistów systemu Windows przy użyciu C. Te makra API, jedząc wiadomości i kontroli API są zdefiniowane w pliku WINDOWSX.H.
Ta składnia jest przede wszystkim zaprojektowana dla programistów języka C. MFC obsługuje korzystanie z WINDOWSX.H, więc jeśli masz istniejącego kodu, który opiera się na tych napięć, użyj tego kodu niezmodyfikowanego w MFC. Znajdziesz jednak, że MFC ma porównywalne Idiomy dla wszystkich funkcji WINDOWSX.H i zastosowań C++ język tych zadań z kilku semantyczne i architektury bezpieczeństwa.
Aby użyć WINDOWSX.H, należy się upewnić, że # dołączyć go, zanim zostały uwzględnione AFXWIN.H (lub STDAFX.H Jeśli używasz struktury AppWizard).
Tylko zastrzeżeniem jest, że istnieją dwa WINDOWSX.H API które zderzają się z API C++ MFC. Dwa interfejsy API SubclassWindow i CopyRgn nie są dostępne do użytku w ramach MFC. Trzeba będzie, recode te użycia MFC API (i klas) lub bezpośrednio wywołania interfejsu API systemu Windows. Można także kod własnych makr, tak długo, jak ma inną nazwę.
Uwagi techniczne przez liczbę |nbsp; Uwagi techniczne według kategorii