Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podczas programowania zwykle kompilujesz i testujesz kompilację debugowania projektu. Jeśli następnie skompilujesz aplikację na potrzeby kompilacji wydania, możesz uzyskać naruszenie dostępu.
Na poniższej liście przedstawiono podstawowe różnice między kompilacją debugowania a wersją (niedebug). Istnieją inne różnice, ale poniżej przedstawiono podstawowe różnice, które mogłyby spowodować niepowodzenie aplikacji w kompilacji wydania, gdy działa w kompilacji debugowania.
Zobacz /GZ (Catch Release-Build Errors in Debug Build) opcja kompilatora, aby uzyskać informacje na temat przechwytywania błędów kompilacji wydania w kompilacjach debugowania.
Układ stert
Układ sterty będzie przyczyną około 9dziesiąt procent widocznych problemów, gdy aplikacja działa w debugowanie, ale nie zwalnia.
Podczas kompilowania projektu na potrzeby debugowania używasz alokatora pamięci debugowania. Oznacza to, że wszystkie alokacje pamięci mają umieszczone wokół nich bajty ochrony. Te bajty ochrony wykrywają zastępowanie pamięci. Ponieważ układ stertu różni się między wersjami wydania i debugowania, zastąpienie pamięci może nie powodować żadnych problemów w kompilacji debugowania, ale może mieć katastrofalne skutki w kompilacji wydania.
Aby uzyskać więcej informacji, zobacz Sprawdzanie nadpisywania pamięci i Sprawdzanie zastąp pamięci za pomocą kompilacji debugowania.
Kompilacja
Wiele makr MFC i większość zmian implementacji MFC podczas kompilowania na potrzeby wydania. W szczególności makro ASSERT nie daje żadnej wartości w kompilacji wydania, więc żaden kod znaleziony w usłudze ASSERTs nie zostanie wykonany. Aby uzyskać więcej informacji, zobacz Sprawdzanie instrukcji ASSERT.
Niektóre funkcje są podkreślone w celu zwiększenia szybkości kompilacji wydania. Optymalizacje są zwykle włączone w kompilacji wydania. Jest również używany inny alokator pamięci.
Obsługa wskaźnika
Brak informacji o debugowaniu usuwa dopełnienie z aplikacji. W kompilacji wydania wskaźniki bezpańskie mają większe prawdopodobieństwo wskazywania niezainicjowanej pamięci zamiast wskazywania na informacje debugowania.
Optymalizacje
W zależności od charakteru niektórych segmentów kodu optymalizator może wygenerować nieoczekiwany kod. Jest to najmniej prawdopodobna przyczyna problemów z kompilacją wydania, ale występuje czasami. Aby uzyskać rozwiązanie, zobacz Optymalizowanie kodu.