Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Możesz debugować kod języka C++, który jest uruchomiony w jednostce przetwarzania grafiki (GPU). Obsługa debugowania procesora GPU w programie Visual Studio obejmuje detekcję rywalizacji, uruchamianie procesów, dołączanie do nich oraz integrację z oknami debugowania.
Obsługiwane platformy
Debugowanie jest obsługiwane w systemach Windows 7, Windows 8, Windows 10, Windows 11, Windows Server 2008 R2, Windows Server 2012 i Windows Server 2016. Do debugowania w emulatorze oprogramowania wymagany jest system Windows 8, Windows 10, Windows 11 lub Windows Server 2012. Aby debugować na sprzęcie, należy zainstalować sterowniki dla karty graficznej. Nie wszyscy dostawcy sprzętu implementują wszystkie funkcje debugera. Zapoznaj się z dokumentacją dostawcy, aby uzyskać informacje o ograniczeniach.
Uwaga / Notatka
Niezależni dostawcy sprzętu, którzy chcą obsługiwać debugowanie procesora GPU w programie Visual Studio, muszą utworzyć bibliotekę DLL, która implementuje interfejs VSD3DDebug i jest przeznaczona dla własnych sterowników.
Konfigurowanie debugowania procesora GPU
Debuger nie może zatrzymać się zarówno na kodzie CPU, jak i GPU podczas jednej operacji aplikacji. Domyślnie debuger przerywa działanie kodu CPU. Aby debugować kod procesora GPU, wykonaj jedną z następujących dwóch kroków:
Na liście Typ debugowania na pasku narzędzi Standardowa, wybierz pozycję Tylko GPU.
W Eksploratorze rozwiązań w menu skrótów dla projektu wybierz pozycję Właściwości. W oknie dialogowym Strony właściwości wybierz pozycję Debugowanie, a następnie wybierz pozycję Tylko procesor GPU na liście Typ debugera .
Uruchamianie i dołączanie do aplikacji
Polecenia debugowania programu Visual Studio umożliwiają uruchamianie i zatrzymywanie debugowania procesora GPU. Aby uzyskać więcej informacji, zobacz Nawigowanie po kodzie za pomocą debugera. Debuger procesora GPU można również dołączyć do uruchomionego procesu, ale tylko wtedy, gdy ten proces wykonuje kod procesora GPU. Aby uzyskać więcej informacji, zobacz Dołączanie do uruchomionych procesów.
Uruchom bieżący blok do kursora i uruchom do kursora
Podczas debugowania na GPU masz dwie opcje kontynuowania do lokalizacji kursora. Polecenia dla obu opcji są dostępne w menu skrótów edytora kodu.
Polecenie Uruchom do kursora uruchamia aplikację, dopóki nie osiągnie lokalizacji kursora, a następnie ulegnie awarii. Nie oznacza to, że bieżący wątek biegnie do kursora; oznacza to, że pierwszy wątek, który dotrze do punktu kursora, wyzwala punkt przerwania. Zobacz Nawigowanie po kodzie za pomocą debugera
Polecenie Uruchom bieżący kafelek do kursora uruchamia aplikację, aż wszystkie wątki w bieżącym kafelku osiągną kursor, a następnie zatrzymuje się.
Debugowanie systemu Windows
Korzystając z niektórych okien debugowania, można sprawdzać, flagować i blokować wątki procesora GPU. Aby uzyskać więcej informacji, zobacz:
Wyjątki synchronizacji danych
Debuger może zidentyfikować kilka warunków synchronizacji danych podczas wykonywania. Po wykryciu warunku debuger wprowadza stan przerwania. Dostępne są dwie opcje— Przerwij lub Kontynuuj. Korzystając z okna dialogowego Wyjątki, można skonfigurować, czy debuger wykrywa te warunki, a także przy jakich warunkach się zatrzyma. Aby uzyskać więcej informacji, zobacz Zarządzanie wyjątkami za pomocą debugera. Możesz również użyć okna dialogowego Opcje , aby określić, że debuger powinien ignorować wyjątki, jeśli zapisane dane nie zmieniają wartości danych. Aby uzyskać więcej informacji , zobacz Ogólne, Debugowanie, Opcje , Okno dialogowe.
Rozwiązywanie problemów
Określanie akceleratora
Punkty przerwania w kodzie GPU są trafiane tylko wtedy, gdy kod jest uruchomiony na akceleratorze accelerator::direct3d_ref (REF). Jeśli nie określisz akceleratora w kodzie, akcelerator REF zostanie automatycznie wybrany jako Typ akceleratora debugowania we właściwościach projektu. Jeśli kod jawnie wybierze akcelerator, akcelerator REF nie będzie używany podczas debugowania, a punkty przerwania nie zostaną trafione, chyba że sprzęt procesora GPU ma obsługę debugowania. Aby rozwiązać ten problem, możesz napisać kod, aby używał akceleratora REF podczas debugowania. Aby uzyskać więcej informacji, zobacz właściwości projektu oraz Using accelerator and accelerator_view Objects and Project Settings for a C++ Debug Configuration ( Używanie akceleratora i obiektów accelerator_view i ustawień projektu dla konfiguracji debugowania języka C++).
Warunkowe punkty przerwania
Warunkowe punkty przerwania w kodzie procesora GPU są obsługiwane, ale nie każde wyrażenie można ocenić na urządzeniu. Gdy nie można ocenić wyrażenia na urządzeniu, zostanie ono ocenione na debugerze. Debuger może działać wolniej niż urządzenie.
Błąd: Wystąpił problem z konfiguracją z wybranym typem akceleratora debugowania.
Ten błąd występuje, gdy występuje niespójność między ustawieniami projektu a konfiguracją komputera, na którym debugujesz. Aby uzyskać więcej informacji, zobacz Project Settings for a C++ Debug Configuration (Ustawienia projektu dla konfiguracji debugowania języka C++).
Błąd: Sterownik debugowania dla wybranego typu akceleratora debugowania nie jest zainstalowany na maszynie docelowej.
Ten błąd występuje, jeśli debugujesz na komputerze zdalnym. Debugger nie może określić, czy sterowniki są zainstalowane na komputerze zdalnym, dopóki nie zostanie uruchomiony program. Sterowniki są dostępne od producenta karty graficznej.
Błąd: Wykrywanie i odzyskiwanie po przekroczeniu limitu czasu (TDR) muszą być wyłączone w zdalnej lokalizacji.
Obliczenia C++ AMP mogą przekraczać domyślny limit czasu ustawiony przez proces wykrywania przekroczenia limitu czasu systemu Windows i odzyskiwania (TDR). W takim przypadku obliczenia zostaną anulowane i dane zostaną utracone. Aby uzyskać więcej informacji, zobacz Obsługa TDR w języku C++ AMP.