Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: .NET Core 2.1, .NET Core 3.1, .NET 5
Bu makalede, başka bir sanal makinede (VM) çekirdek döküm dosyası açmak için Linux için Windows Alt Sistemi (WSL) sürüm 2'nin nasıl kullanılacağı açıklanır.
Önkoşullar
Bu bölümü takip edebilmek ve tamamlayabilmek için aşağıdakilere sahip olmanız gerekir:
- Linux için Windows Alt Sistemi etkinleştirmek için Windows 10 tabanlı bir bilgisayar.
- Herhangi bir klasördeki Windows tabanlı bilgisayarınıza kopyalanan en az bir çekirdek döküm dosyası.
Bu laboratuvarın hedefi
WSL sürüm 2'yi kullanarak başka bir VM'de çekirdek döküm dosyasını açmayı öğreneceksiniz.
Linux için Windows Alt Sistemi kullanma
WSL , geliştiricilerin geleneksel vm veya çift önyükleme kurulumu ek yükü olmadan doğrudan Windows üzerinde bir GNU/Linux ortamı çalıştırmasına olanak tanır.
WSL'yi etkinleştirmek için Windows Server Yükleme Kılavuzu'na gidin ve WSL2'ye yükseltin. Bu laboratuvarda linux işletim sisteminizle aynı Ubuntu 18.04 LTS'yi seçtiğiniz varsayılır. Sistem WSL2 kullanılarak çalıştırılır.
WSL2'yi yükledikten sonra ve sudo apt upgrade
komutlarını kullanarak paket yöneticisini güncelleştirinsudo apt update
. Linux VM'yi ilk kez yüklerken bu serinin önceki bölümlerinde yer alan bu komutları biliyor olmanız gerekir.
sudo apt update
sudo apt upgrade
Windows'tan Linux'a dosya kopyalama
Artık Windows tabanlı bilgisayarınızda WSL2'nin çalışıyor olması gerekir. Önceki bölümde, Windows tabanlı bilgisayarınızdaki D:\Learn\Linux\Dumps klasöründen çekirdek döküm dosyalarını kopyaladınız ve dosya adının coredumps.tar.gz olduğu varsayıldı. Şimdi amacınız D:\Learn\Linux\Dumps\coredumps.tar.gz'ı WSL2 içinde çalışan Linux VM'ye kopyalamaktır.
WSL2'deki komut satırının aşağıdaki ekran görüntüsüne baktığınızda, Windows'taki C sürücüsünün WSL2 Linux makinesinde /mnt/c olarak eşlendiğine dikkat edin. Bu nedenle, D:\Learn\Linux\Dumps klasörünün içeriğini listelemek için komutunu çalıştırabilirsinizll mnt/d/Learn/Linux/Dumps/
.
Şimdi coredumps.tar.gz dosyasını kopyalayıp Linux giriş dizinindeki döküm dosyaları klasörüne ayıklayın. Adımlar kolaydır:
- komutunu kullanarak dizini giriş dizininizle
cd ~
değiştirin. - komutunu çalıştırarak
mkdir dumps
döküm dosyaları klasörü oluşturun. - komutunu çalıştırarak
tar -xf /mnt/d/Learn/Linux/Dumps/coredumps.tar.gz -C dumps/
coredumps.tar.gz dosyasını ayıklayın.
Aşağıdaki ekran görüntüsünde bu komutların nasıl çalıştığını görebilirsiniz.
dotnet-dump kullanarak çekirdek döküm dosyasını açma
Yordamın geri kalanı, .NET Core ve .NET SDK'sını yüklediğiniz önceki sorun giderme laboratuvarlarına benzer. Bu bölüm, bu adımları tekrar gerçekleştirmenizi sağlayacaktır.
dotnet-dump aracı .NET SDK gerektirir. Bu nedenle, dotnet-dump'ı yüklemeden önce .NET SDK'sını yüklemeniz gerekir. Daha önce açıklandığı gibi, .NET SDK'sını yüklemeden önce Microsoft paket imzalama anahtarını güvenilen anahtarlar listesine eklemeniz ve ardından SDK'yı yükleme bölümünde açıklandığı gibi paket deposunu eklemeniz gerekir. Aşağıdaki ekran görüntüsünde eylem adımlarına bakın.
Artık SDK'yı yükleme bölümünde açıklandığı gibi en son SDK'yı yeniden yüklemeye hazırsınız. Aşağıdaki ekran görüntüsünde, komutların sonucunu görüntüleyen Windows Terminali gösterilmektedir.
Dotnet-dump kullanarak çekirdek döküm dosyasını açacaksınız. Bu nedenle, önce aracı yüklemeniz gerekir. Daha önce açıklandığı gibi, dotnet-dump'ı genel bir araç olarak yükleme komutudur dotnet tool install -g dotnet-dump
.
Yüklemenin ardından çekirdek döküm dosyalarını keşfetmeye başlamaya hazırsınız. dotnet-dump kullanarak çekirdek döküm dosyasını açın. Önceki laboratuvarda yaptığınız gibi aşağıdaki komutu çalıştırın:
dotnet-dump analyze ~/dumps/coredump.manual.1.11724
Yönetilen iş parçacıklarını görüntülemek için çalıştırmayı clrthreads
deneyin. Bu komutun başarısız olması ve aşağıdaki hata iletisini oluşturması beklenir.
Hata iletisi aşağıdaki gibidir:
mscordaccore.dll yüklenemiyor veya başlatılamıyor. Hedef çalışma zamanı başlatılamayabilir.
Gerekli .NET Core çalışma zamanı Linux VM'de yüklü olmadığından bu hata oluşur. Linux dökümlerinde hata ayıklama bölümünde açıklandığı gibi, .NET Core dökümlerini analiz etmek için hem LLDB hem de SOS, döküm dosyasının oluşturulduğu ortamdan aşağıdaki .NET Core ikili dosyalarını gerektirir:
- libmscordaccore.so
- libcoreclr.so
- dotnet (uygulamayı başlatmak için kullanılan konak)
Döküm dosyalarını uygulamanın barındırıldığı ve çalıştırıldığı vm'de analiz ettiğiniz için bu, önceki sorun giderme laboratuvarlarında sorun oluşturmamıştı. Bu nedenle, dosyalar zaten vardı. Şimdi, bu dosyaların doğru sürümünü bir yerden kopyalamanız gerekir (örneğin, çekirdek döküm dosyalarının alındığı VM'den) veya aynı .NET çalışma zamanını WSL2 Linux VM'sine yüklemeniz gerekir.
Hedef .NET Core çalışma zamanını belirlemek için çeşitli yöntemler vardır. En kolayı, uygulama sahibine sormaktır. İsterseniz, sahibi sizseniz uygulamanın hedef .NET Core çalışma zamanını da bilirsiniz. Ya bu bilgiye hiç sahip değilsen? Bu durumda, işlemde yüklenen yerel modülleri listeleyen bir SOS uzantısı komutu lm
veya modules
kullanabilirsiniz. .NET yüklemenizin sürümünü belirlemek için bu komutu çalıştırın.
Bu ekran görüntüsünde gösterildiği gibi .NET Core çalışma zamanı sürümü 3.1.10'du. libmscordaccore.so, libcoreclr.so ve .NET'in doğru sürümüne ihtiyacınız vardır. Bu dosyaları, çekirdek döküm dosyalarının oluşturulduğu VM'den kopyalayabilirsiniz.
Aynı sonucu elde etmenin başka bir yolu var mı? Örneğin, bu dosyalara sahip olmak için .NET Core çalışma zamanı sürüm 3.1.10'u yükleyebilir misiniz? Kısa cevap evet, yapabilirsiniz. Ancak komutunu kullanarak sudo apt install dotnet-runtime-3.1.10
yükleyemezsiniz.
Bunun yerine.NET Core çalışma zamanı 3.1'i yükleyebilirsiniz. Ancak bu sürüm, bu makalenin yazıldığı sırada en son .NET Core 3.1 sürümünü (.NET Core 3.1.15) yükler.
Çekirdek döküm dosyası bir .NET Core 3.1.10 işlemi için olduğundan bu işlem çalışmaz. Bu gerekli dosyaların eşleşen sürümüne sahip olmanız gerekir.
Neyse ki, çekirdek döküm dosyalarında hata ayıklamak için gereken dosyaları (semboller, DAC, modüller vb.) indirebilen bir dotnet-symbol aracı vardır. Bu aracı önceki bölümlerden hatırlayabilirsiniz. Bu aracı yüklemek için komutunu çalıştırın dotnet tool install -g dotnet-symbol
.
Şimdi dotnet-symbol aracından çekirdek döküm dosyamızı hedefleyen gerekli dosyaları indirmesini istemeniz gerekir. Bu, çekirdek döküm dosyası adını ve diğer gerekli parametreleri geçirir: dotnet-symbol --host-only --debugging ~/dumps/coredump.manual.1.11724
.
Listedeki son iki hatayı yoksayabilirsiniz. Gerekli dosyalar ~/dumps klasörüne indirilir.
dotnet-dump kullanarak çekirdek döküm dosyasını açın ve aynı clrthreads
komutları çalıştırmayı deneyin.
Artık WSL2 kullanarak Windows VM'nizde çekirdek döküm dosyasını açabiliyor olmanız gerekir.
Lldb'de döküm dosyalarını açma
Bu adımlar, önceki sorun giderme laboratuvarlarındaki adımlarla aynıdır. Dotnet-dump kullanarak çekirdek döküm dosyalarında hata ayıklamak için gerekli dosyaları almak için önemli bölümleri önceden ele almış olmanız gerekir. Yordam LLDB için aynıdır. Hata ayıklama için lldb'yi yüklemek ve kullanmak istiyorsanız, önceki laboratuvarları denetleyin.
dotnet-symbol gerekli dosyaları bulamıyorsa
Dotnet-symbol, çekirdek döküm dosyalarının çoğu için çalışır. Bir nedenden dolayı gerekli dosyaları indiremezse, engellemeyi geçici olarak gidermenin yolları vardır. İkili dosyaları resmi Microsoft web sayfasından indirebilir ve ayıklayabilirsiniz. Ardından, gerekli dosyaları çekirdek döküm dosyasını içeren aynı klasöre el ile kopyalayın.
Örneğin, .NET Core 3.1.10 x64 dosyalarına ihtiyacınız varsa, ikili dosyaları bu ASP.NET Core 3.1 Çalışma Zamanı (v3.1.10) - Linux x64 İkili dosyalar indirme sayfasından indirebilir ve dosyaları el ile kopyalayabilirsiniz:
- .\shared\Microsoft.NETCore.App\3.1.10\libcoreclr.so
- .\shared\Microsoft.NETCore.App\3.1.10\libmscordaccore.so
- .\shared\Microsoft.NETCore.App\3.1.10\libmscordbi.so
- .\shared\Microsoft.NETCore.App\3.1.10\
- .\dotnet
Hedef çalışma zamanı sürümü özel bir sürümse (.NET Core'un açık kaynak olduğunu ve kendi özel sürümünüzü oluşturup kullanabileceğinizi unutmayın), bu dosyaları çekirdek döküm dosyasının oluşturulduğu Linux VM'den kopyalamanız gerekir.