Rozwiązywanie problemów z błędami profilowania i rozwiązywanie problemów
Ten artykuł zawiera rozwiązania niektórych typowych błędów, które mogą uniemożliwiać używanie lub pobieranie wystarczających danych z profilera wydajności w programie Visual Studio.
Brak wyników
Błąd: "Brak danych w bieżącym zestawie filtrów"
Podczas otwierania pliku diagsession niektóre filtry są stosowane, takie jak ukrywanie kodu natywnego lub ukrywanie kodu innego niż użytkownik, aby ułatwić zrozumienie śledzenia. Ponadto istnieją inne filtry, które można zastosować, takie jak wybór czasu i wątek, które dodatkowo zawężają wyświetlane dane. Jeśli te filtry są stosowane w sposób, w jaki nie ma danych do pokazania, zostanie wyświetlone to ostrzeżenie.
Jak rozwiązać problem
- Upewnij się, że wybór czasu zawiera dane. Jeśli wybór czasu został zmieniony na wykresie powyżej danych, wybierz pozycję Wyczyść zaznaczenie , aby je zresetować.
- Następnie, jeśli nadal nie ma danych, upewnij się, że wszystkie kategorie i wątki są włączone na odpowiednich listach rozwijanych.
- Jeśli aplikacja, którą profilujesz, jest kodem natywnym, upewnij się, że opcja Pokaż kod natywny jest włączona na liście rozwijanej Ustawienia.
- Jeśli nadal nie masz żadnych danych, zebrane dane prawdopodobnie były zbyt krótkie, aby dane były obecne. Upewnij się, że program zbierający dane nie kończy się zbyt szybko (mniej niż sekundę).
Zobacz również: Pokaż kod zewnętrzny
Ukończenie wyników trwa długo
Jeśli analizowanie sterta po kolekcji wydaje się powolne do załadowania, zapoznaj się z następującymi możliwymi rozwiązaniami, które mogą pomóc w rozwiązaniu problemów z czasem oczekiwania.
Jak rozwiązać problem Czasami może to trwać dłużej podczas próby analizowania migawek z aplikacji intensywnie korzystających z pamięci, ale uaktualnienie do nowszej wersji programu Visual Studio powinno skrócić czas oczekiwania na analizę. Jeśli ten problem jest trwały po uaktualnieniu, może wystąpić usterka wydajności narzędzia. Utwórz bilet opinii i udostępnij utworzony plik diagsession . Dzięki plikowi możemy określić, dlaczego dane są powolne do analizowania i znajdowania, gdzie możemy wprowadzić ulepszenia wydajności.
Pamiętaj o podaniu plików śledzenia i zrzutu stertowego w bilecie opinii.
Zobacz też:
Błąd "Nie można utworzyć pliku manifestu dla tej diagnostyki" lub "błąd nie może utworzyć pliku manifestu dla diagsession, program Visual Studio nie będzie mógł ponownie otworzyć tej sesji".
Ten problem oznacza, że wystąpił problem podczas przygotowywania danych migawki pamięci do przeanalizowania i wyświetlania po zatrzymaniu w celu zebrania danych. Istnieje wiele potencjalnych przyczyn występowania problemu, od niepowodzenia uzyskania poprawnych informacji od agentów kolekcji do rzeczywistego przetwarzania danych. W związku z tym nie będzie można zdiagnozować problemu bez dalszego rejestrowania.
Jak rozwiązać problem Z odpowiedzią na bilet opinii przy użyciu dodatkowych informacji rejestrowania, abyśmy mogli zdiagnozować problem. Informacje dziennika można uzyskać, uruchamiając następujące polecenia z wiersza polecenia z podwyższonym poziomem uprawnień:
reg add HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\DiagnosticsHub /v LogLevel /t REG_SZ /d All /reg:32
reg add HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\DiagnosticsHub /v LogDirectory /t REG_SZ /d [directory of your choice] /reg:32
Po uruchomieniu tych poleceń uruchom program Visual Studio, odtwórz swój scenariusz, zamknij program Visual Studio, a następnie spakuj wybrany katalog dziennika DiagnosticsHub i dołącz go do tego biletu. Od tego momentu powinniśmy być w stanie lepiej zdiagnozować to, co się dzieje.
Po dodaniu dziennika do biletu uruchom następujące polecenia, aby wyłączyć rejestrowanie:
reg delete HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\DiagnosticsHub /f /v LogLevel /reg:32
reg delete HKEY_LOCAL_MACHINE\Software\Microsoft\VisualStudio\DiagnosticsHub /f /v LogDirectory /reg:32
Błąd: "Informacje źródłowe są niedostępne".
Aby wyświetlić informacje o źródle, musisz mieć pliki PDB dostępne od czasu zbierania. Dlatego jeśli na przykład zbierzesz plik diagsession użycia procesora CPU, wprowadź pewne zmiany w kodzie, ponownie skompiluj (co zastępuje stary plik PBD), a następnie ponownie otwórz plik diagsession, prawdopodobnie nie będzie można wyświetlić informacji źródłowych dla modułów zaktualizowanego kodu.
Jak rozwiązać najprostszym obejściem tego problemu jest zebranie nowej diagnostyki po wprowadzeniu zmian. Dzięki temu możesz mieć pewność, że pliki PDB są aktualne.
Błąd: "Analiza pamięci nie powiodła się z powodu błędu wewnętrznego".
Po długiej sesji profilowania pamięci wszelkie próby przeanalizowania wyniku zostaną spełnione z powodu błędu.
Wystąpiła niezgodność informacji migawki przechwyconych przez narzędzie pamięci i agenta kolekcji. Ten wynik oznacza, że narzędzie pamięci nie może odnaleźć pliku stanu sterty dla migawki natywnej. Może to również spowodować, że narzędzie pamięci nie może dopasować czasu rozpoczęcia GC migawki do tej zarejestrowanej w pliku diagsession w celu pobrania GCStats.
Jak rozwiązać ten problem był spowodowany usterką w narzędziu, który został rozwiązany w wersji 17.3. Uaktualnienie do nowszej wersji powinno rozwiązać problem. Jeśli problem jest nadal trwały po uaktualnieniu, utwórz bilet opinii i dołącz go do biletu:
- Plik diagsession
- Minidump programu Visual Studio
- Zrzut ekranu przedstawiający wykonane migawki pamięci.
Nie ma obejścia tego problemu, a sesja profilowania musi zostać ponownie uruchomiona.
Błąd: "Porzucone zdarzenia diagnostyczne X, niektóre informacje w raporcie mogą być brakujące lub niedokładne"
Czasami podczas przechwytywania danych zdarzenia mogą zostać porzucone, co może spowodować, że wynikowy raport profilowania będzie niedokładny lub bezużyteczny. Porzucone zdarzenia mogą wystąpić z wielu różnych powodów, ale występuje głównie wtedy, gdy system nie może opróżnić zdarzeń na dysk szybciej niż szybkość przychodząca.
Jak rozwiązać ten problem , aby zmniejszyć liczbę porzuconych zdarzeń, można zamknąć inne operacje intensywnie korzystające z dysku i procesora CPU podczas profilowania. Zamykając te operacje, system może przeznaczyć więcej zasobów na opróżnianie zdarzeń przychodzących. Możesz również spróbować zmniejszyć częstotliwości próbkowania na narzędziach, które obsługują te ustawienia konfiguracji, takie jak narzędzie użycie procesora CPU i narzędzie alokacji platformy .NET, a tym samym zmniejszyć obciążenie.
Błąd: Zasoby ETW zostały wyczerpane
Profiler programu Visual Studio używa funkcji śledzenia zdarzeń dla systemu Windows (ETW) do zbierania informacji o wydajności. Istnieje skończona liczba sesji ETW dostępnych do użycia w systemie i jeśli wszystkie sesje są już używane, zostanie wyświetlony następujący błąd: ETW resources have been exhausted
. Te sesje są używane przez inne programy, takie jak zestaw narzędzi SysInternals, inne profileery i inne narzędzia diagnostyczne. Ten problem można rozwiązać, wykonując następujące czynności:
Zamykanie programów korzystających z sesji w celu zwolnienia zasobów lub
Odłóż więcej zasobów, uruchamiając następujące polecenie z wiersza polecenia z podwyższonym poziomem uprawnień, a następnie uruchamiając ponownie:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI" /v EtwMaxLoggers /t REG_DWORD /d 128
Uruchomienie tego polecenia zwiększa domyślną liczbę sesji z 64 do 128 (256 jest maksymalną liczbą sesji dozwolonych w systemie).
Błąd: narzędzie użycie procesora CPU nie działa na maszynie wirtualnej ARM64
Profiler programu Visual Studio używa funkcji śledzenia zdarzeń dla systemu Windows (ETW) do zbierania informacji o wydajności. Obecnie zbieranie przykładów profilów przy użyciu funkcji ETW nie jest obsługiwane w systemie Windows dla usługi ARM64 podczas uruchamiania na maszynie wirtualnej. Aby obejść to ograniczenie, możesz użyć narzędzia Użycie procesora CPU na rzeczywistym urządzeniu ARM64 lub użyć narzędzia Instrumentacja, aby przechwycić informacje o chronometrażu.
Błąd: Narzędzie użycie pamięci nie działa na platformie .NET 7 i .NET Runtime 8.0.0-8.0.1 z włączonym GC serwera
Ze względu na problem wprowadzony w środowisku uruchomieniowym .NET 7 i propagowany do środowiska uruchomieniowego platformy .NET 8 w wersji 8.0.0 i 8.0.1 nie można wyliczyć obiektów podczas korzystania z odzyskiwania pamięci serwera. Odzyskiwanie pamięci serwera jest domyślnie włączone dla aplikacji ASP.NET Core.
Jak rozwiązać problem
Aby obejść ten problem:
- Wyłącz odzyskiwanie pamięci serwera podczas tworzenia migawki lub zbierania zrzutu aplikacji.
- Użyj nienadanej wersji środowiska uruchomieniowego platformy .NET.
Zobacz też:
- Odzyskiwanie pamięci stacji roboczej i serwera
- Opcje konfiguracji środowiska uruchomieniowego dla odzyskiwania pamięci
- Moduł DAC nie może wyliczyć obiektów sterty na platformie .NET 7+ z powodu regionów GC