Udostępnij za pośrednictwem


Jak: kodzie zoptymalizowanym debugowania

[!UWAGA]

Okna dialogowe i poleceń menu, którą widzisz może różnią się od opisane w pomocy, w zależności od ustawień aktywny lub edition.Aby zmienić ustawienia, wybierz polecenie Importuj i Eksportuj ustawienia w menu Narzędzia.Aby uzyskać więcej informacji, zobacz Visual Studio, ustawienia.

Gdy kompilator optymalizuje kod, zmiana i Reorganizuje instrukcje.Powoduje to bardziej efektywne kod skompilowany.Ze względu na to przegrupowanie debuger nie może zidentyfikować zawsze kod źródłowy, który odpowiada zestawu instrukcji.

Optymalizacja może mieć wpływ na:

  • Zmienne lokalne, które mogą być usuwane przez optymalizator lub przeniesione do lokalizacji, których nie może zrozumieć debugera.

  • Pozycje wewnątrz funkcji, które zostały zmienione podczas Optymalizator łączy bloki kodu.

  • Nazwy funkcji ramek na stos wywołań, który może być błędny, jeśli Optymalizator łączy dwie funkcje.

Ramki, które widać na stos wywołań są prawie zawsze poprawne, jednak przy założeniu, że mają symbole dla wszystkich klatek.Jeśli masz uszkodzeniem stosu, jeśli zostały napisane w języku zestawu funkcji lub są ramkami systemu operacyjnego bez dopasowywania symbole na stos wywołań ramek na stos wywołań będą nieprawidłowe.

Zmienne globalne i statyczne są zawsze wyświetlane prawidłowo.To jest układ struktury.Jeśli wskaźnik do struktury i wartość wskaźnika jest poprawny, co zmienna członka struktury wyświetli poprawną wartość.

Ze względu na ograniczenia te powinny debugowania, jeśli to możliwe przy użyciu unoptimized wersję programu.Domyślnie optymalizacja jest wyłączone w konfiguracji debugowania programu Visual C++ i włączona w konfiguracji wydania.

Jednak błąd może się pojawić tylko zoptymalizowanej wersji programu.W takim przypadku musi debug zoptymalizowanego kodu.

Aby włączyć funkcję optymalizacji w debugowanie zbudować konfiguracji

  1. Podczas tworzenia nowego projektu, zaznacz Win32 Debug docelowej.Użyj Win32Debug docelowe, aż program jest w pełni debugowany i przystąpić do tworzenia Win32 Release docelowej.Kompilator nie optymalizuje Win32 Debug docelowej.

  2. Wybierz projekt w oknie Solution Explorer.

  3. Na widoku menu, kliknij Stron właściwości.

  4. W Stron właściwości okna dialogowego pole, upewnij się, Debug jest zaznaczona w konfiguracji listy rozwijanej.

  5. W widoku folderu po lewej stronie wybierz C i C++ folder.

  6. W obszarze C++ folder, wybierz opcję Optimization.

  7. Na liście właściwości po prawej stronie znaleźć Optimization.Ustawienie obok prawdopodobnie mówi Disabled (i wartości).Choose one of the other options (Minimum Size(/O1), Maximum Speed(/O2), Full Optimization(/Ox), or Custom).

  8. Jeśli została wybrana opcja Custom opcja dla Optimization, obecnie można ustawić opcje dla każdego z pozostałych właściwości wyświetlane na liście właściwości.

Podczas debugowania kodu zoptymalizowane, użyj demontażu okno, aby zobaczyć, jakie instrukcje są faktycznie utworzony i wykonywane.Jeśli punkty przerwania, należy znać punkt przerwania mogą być przenoszone wraz z instrukcją.Na przykład rozważmy następujący kod:

for (x=0; x<10; x++)

Załóżmy, że ustawianie punktu przerwania w tym wierszu.Można by oczekiwać przerwania można trafić 10 razy, ale jeśli kod jest zoptymalizowany, punkt przerwania jest hit tylko jeden raz.Wynika to pierwsza instrukcja ustawia wartość x na 0.Kompilator uznaje, że to tylko musi odbywać się raz przenosi go z pętli.Punkt przerwania przenosi się z nim.Instrukcje porównać i zwiększ wartość x pozostają wewnątrz pętli.Podczas wyświetlania demontażu okna, jednostki krok jest automatycznie ustawiana na instrukcji większe możliwości sterowania jest przydatne, gdy krokowo zoptymalizowanego kodu.

Zobacz też

Koncepcje

Debuger zabezpieczeń

Inne zasoby

Debugowanie kodu macierzystego