Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym przewodniku opisano sposób rozwiązywania problemów w programie WSL i określania, skąd pochodzą.
Krótka uwaga dotycząca architektury
Aby ustalić, co powoduje problem, musimy dowiedzieć się, gdzie znajduje się on w stosie.
Gdy plik binarny systemu Linux jest wywoływany w programie WSL, przechodzi przez te warstwy (w przybliżeniu), każdy z nich może być miejscem, z którego pochodzi błąd:
graph TD;
id1["Linux binary in userspace"]-->id2["Linux distro"];
id2["Linux distro"]-->id3["WSL's stack"];
id4["WSL's stack"]-->id5["Physical hardware"];
Będziemy przechodzić przez ten stack w kolejności i pokazywać Ci, jak ustalić, czy źródło błędu pochodzi z tej sekcji.
Plik binarny systemu Linux w przestrzeni użytkownika
Najpierw musimy sprawdzić, czy jest to błąd spowodowany przez sam plik binarny systemu Linux. Najprostszym sposobem, aby to zrobić, jest sprawdzenie, czy ten błąd występuje na prawdziwej maszynie z systemem Linux (najlepiej bezpośrednio na sprzęcie lub uruchom pełne Ubuntu w Hyper-V dla dobrego porównania). Jeśli błąd występuje w taki sam sposób na prawdziwej maszynie z systemem Linux, wiemy, że jest to plik binarny systemu Linux lub dystrybucja.
Alternatywnie możesz uruchomić strace polecenie , aby określić, co się dzieje. To polecenie pokazuje, jakie wywołania systemowe wykonuje plik binarny systemu Linux, i pozwala określić, do jakich zasobów próbuje uzyskać dostęp oraz gdzie może wystąpić niepowodzenie. Ten przewodnik nie zawiera pełnego przewodnika dotyczącego debugowania strace stosów (lub inaczej byłoby to zbyt długie), więc przyjrzyjmy się przykładowi:
Użytkownik stwierdza, że polecenie xeyes zawiesza się w WSL, ale nie zawiesza się na komputerze z systemem Linux. Uruchomienie strace xeyes pokazuje, że polecenie zawiesza się na wywołaniu systemowym openat. Oznacza to, że jądro systemu Linux utknęło próbując uruchomić wywołanie openat i wskazuje, że problem nie znajduje się w samym pliku binarnym.
Co zrobić, jeśli problem występuje w pliku binarnym systemu Linux
Pliki binarne systemu Linux obecne w programie WSL są udostępniane przez ich odpowiednich właścicieli i nie są bezpośrednio własnością firmy Microsoft. Jeśli widzisz problem w pliku binarnym systemu Linux, zgłoś go bezpośrednio właścicielowi tego pliku binarnego.
Dystrybucja systemu Linux
Niektóre błędy mogą również pochodzić z samej dystrybucji systemu Linux. Dystrybucje systemu Linux w systemie WSL są naprawdę tylko kolekcją plików binarnych systemu Linux, więc te same kroki rozwiązywania problemów, jak powyżej, mają zastosowanie. Jednak dystrybucja systemu Linux jest odpowiedzialna za kluczowe doświadczenia, takie jak menedżer pakietów, co może znacznie wpływać na sposób interakcji binariów ze sobą.
Aby rozwiązać ten problem, należy użyć tych samych technik, co powyżej, sprawdzić, czy problem występuje również na systemie Linux, używając strace do zidentyfikowania przyczyny awarii (lub innych kodów błędów) i spróbowanie określenia, czy pochodzi z konkretnego pliku binarnego w systemie Linux. Jeśli sam plik binarny jest własnością dystrybucji, jest to problem z dystrybucją systemu Linux.
Co zrobić, jeśli problem występuje w dystrybucji systemu Linux
Podobnie jak w przypadku plików binarnych Linuxa, dystrybucje WSL są dostarczane przez odpowiednich opiekunów. Zgłoś problem bezpośrednio z dystrybucją systemu Linux, której dotyczy problem.
Stos WSL
Następnie błąd może pochodzić z samej logiki WSL. Jeśli problem nie występuje bezpośrednio na sprzęcie z systemem Linux lub coś na poziomie maszyny zawodzi, oznacza to, że problem pochodzi z WSL. Poniżej przedstawiono typowe ścieżki błędów oraz sposób ich określania i zbierania dzienników:
Błędy lub awarie uruchamiania WSL z wsl.exe.
Najbardziej oczywistym błędem jest tutaj błąd pochodzący bezpośrednio wsl.exe , taki jak na przykład ten problem z usługą GitHub. W takim przypadku zbierz dzienniki programu WSL , które odtworzyją problem i zgłoś problem w repozytorium GitHub WSL.
Zawiesza się program WSL
Innym typowym błędem jest to, że program WSL zawiesza się i nie odpowiada na żadne polecenia. W takim przypadku proszę zgłosić awarię procesu WSL, postępując zgodnie z tymi instrukcjami. Możesz wymusić awarię i zebrać zrzut, otwierając Menedżer zadań —> Procesy —> kliknij prawym przyciskiem myszy VmmemWSL —> utwórz plik zrzutu pamięci. Dołącz ten zrzut awaryjny i zgłoś problem w repozytorium GitHub WSL.
Błędy sieci
Ponownie sprawdź, czy nie jest to problem binarny z systemem Linux. Jeśli to możliwe, sprawdź, czy nie jest to ogólny problem z wirtualizacją lub siecią VPN, próbując Hyper-V maszynę wirtualną na tym komputerze, aby sprawdzić, czy ma ograniczone możliwości sieciowe. Jeśli problem występuje tylko w środowisku WSL, zgłoś problem w repozytorium GitHub WSL.
Różne problemy
Jeśli otrzymujesz inny rodzaj błędu WSL, który uważasz, że jest związany z usługą WSL, dołącz dzienniki i utwórz go w repozytorium GitHub WSL.
Zgłębianie się w zapisy WSL
Możesz otworzyć dzienniki WSL, aby zobaczyć, jaki jest dokładny błąd. Aby to zrobić, najpierw zainstaluj narzędzie Windows Performance Analyzer .
Następnie po utworzeniu dzienników programu WSL (zebranych z tych instrukcji) pobierz plik .zip, który zostanie utworzony i rozpakuj go. Otwórz wynikowy folder i poszukaj pliku o nazwie : logs.etl i kliknij dwukrotnie ten plik, aby otworzyć go w Analizatorze wydajności systemu Windows.
Po otworzie aplikacji wykonaj następujące kroki:
- Kliknij pozycję Działanie systemowe, aby rozwinąć widok
- Przeciągnij pole "Zdarzenia ogólne" u góry do okna głównego
- Znajdź serię "Microsoft.Windows.Lxss.Manager" i kliknij strzałkę, aby ją wybrać
Z tego miejsca można wyświetlić wszystkie zdarzenia diagnostyczne, które są emitowane z programu WSL. Jednym z najbardziej interesujących będzie "VerboseLog" i przekaże więcej szczegółów na temat dokładnej lokalizacji błędu i informacji o nim.
Dodatkowe zasoby
Typowe problemy i rozwiązania są dostępne na stronie dokumentacji rozwiązywania problemów z usługą WSL, dlatego sprawdź, czy występują jakiekolwiek problemy, które mogą wystąpić. Ponadto przejdź do repozytorium GitHub WSL lub dowolnej wyszukiwarki i wyszukaj problem lub jakiekolwiek kody błędów, aby sprawdzić, czy inne osoby napotykają ten sam problem.
Windows Subsystem for Linux