Yönetilen yığın izlemelerini inceleme (dotnet-stack)

Bu makale şunlar için geçerlidir: ✔️ dotnet-stack sürüm 5.0.221401 ve sonraki sürümler

Yükleme

İndirmenin ve yüklemenin dotnet-stackiki yolu vardır:

Özet

dotnet-stack [-h, --help] [--version] <command>

Açıklama

Araç dotnet-stack :

  • Platformlar arası bir .NET Core aracıdır.
  • Hedef .NET işlemindeki tüm iş parçacıkları için yönetilen yığınları yakalar ve yazdırır.
  • EventPipe.NET Core çalışma zamanı tarafından sağlanan izlemeyi kullanır.

Seçenekler

  • -h|--help

    Komut satırı yardımlarını gösterir.

  • --version

    dotnet-stack yardımcı programının sürümünü görüntüler.

Komutlar

Komut Açıklama
dotnet-stack raporu Hedef işlemdeki her iş parçacığı için yığın izlemesini yazdırır.
dotnet-stack ps İzlemelerin toplandığı dotnet işlemlerini listeler.
dotnet-stack symbolicate Bir yığın içindeki Yöntem Belirteci ve IL Uzaklığı'ndan satır numarasını alın.

dotnet-stack raporu

Hedef işlemdeki her iş parçacığı için yığın izlemesini yazdırır.

Özet

dotnet-stack report -p|--process-id <pid>
                    -n|--name <process-name>
                    [-h|--help]

Seçenekler

  • -n, --name <name>

    Yığını raporlama işleminin adı.

  • -p|--process-id <PID>

    Yığını raporlamak için işlem kimliği.

dotnet-stack ps

İzlemelerin toplandığı dotnet işlemlerini listeler. dotnet-stack sürüm 6.0.320703 ve sonraki sürümler, varsa her işlemin başlatıldığı komut satırı bağımsız değişkenlerini de görüntüler.

Özet

dotnet-stack ps [-h|--help]

Örnek

komutunu dotnet run --configuration Releasekullanarak uzun süre çalışan bir uygulama başlattığınızı varsayalım. Başka bir pencerede komutunu çalıştırırsınız dotnet-stack ps . Göreceğiniz çıkış aşağıdaki gibidir. Varsa, komut satırı bağımsız değişkenleri 6.0.320703 ve sonraki sürümlerde dotnet-stack gösterilir.

> dotnet-stack ps
  
  21932 dotnet     C:\Program Files\dotnet\dotnet.exe   run --configuration Release
  36656 dotnet     C:\Program Files\dotnet\dotnet.exe

dotnet-stack symbolicate

Bir yığın içindeki Yöntem Belirteci ve IL Uzaklığı'ndan satır numarasını alın.

Özet

dotnet-stack symbolicate <input-path> [-d|--search-dir] [-o|--output] [-c|--stdout] [-h|--help]

Seçenekler

  • -d, --search-dir <directory1 directory2 ...>

    Derleme ve pdb içeren birden çok dizinin yolu.

  • -o, --output <output-path>

    Doğrudan bir dosyaya çıkış.

  • -c, --stdout

    Doğrudan bir konsola çıkış.

Örnek

> cat stack.trace

Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
   at DotnetStackSymbolicate.App.MethodA() in DotnetStackSymbolicate.dll:token 0x6000002+0x6
   at DotnetStackSymbolicate.App..ctor() in DotnetStackSymbolicate.dll:token 0x6000003+0x51
   at DotnetStackSymbolicate.Program.OnCreate() in DotnetStackSymbolicate.Tizen.dll:token 0x6000001+0x8
onSigabrt called
>
> dotnet-stack symbolicate stack.trace --stdout

Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.
   at DotnetStackSymbolicate.App.MethodA() in C:\DotnetStackSymbolicate\DotnetStackSymbolicate.cs:line 19
   at DotnetStackSymbolicate.App..ctor() in C:\DotnetStackSymbolicate\DotnetStackSymbolicate.cs:line 38
   at DotnetStackSymbolicate.Program.OnCreate() in C:\DotnetStackSymbolicate.Tizen\DotnetStackSymbolicate.Tizen.cs:line 12
onSigabrt called

Output: stack.trace.symbolicated

Yönetilen yığınları dotnet-stack ile raporlama

kullanarak dotnet-stackyönetilen yığınları raporlamak için:

  • Yığınları raporlamak için .NET Core uygulamasının işlem tanımlayıcısını (PID) alın.

    • Windows'da Görev Yöneticisi'ni tasklist veya komutunu kullanabilirsiniz.
    • Örneğin ps Linux'ta komutu.
    • dotnet-stack ps
  • Şu komutu çalıştırın:

    dotnet-stack report --process-id <PID>
    

    Yukarıdaki komut aşağıdakine benzer bir çıkış oluşturur:

    Thread (0x48839B):
      [Native Frames]
      System.Console!System.IO.StdInReader.ReadKey(bool&)
      System.Console!System.IO.SyncTextReader.ReadKey(bool&)
      System.Console!System.ConsolePal.ReadKey(bool)
      System.Console!System.Console.ReadKey()
      StackTracee!Tracee.Program.Main(class System.String[])
    

    çıktısı dotnet-stack aşağıdaki formu izler:

    • Çıktıdaki açıklamalar ön ekinde bulunur #.
    • Her iş parçacığının yerel iş parçacığı kimliğini içeren bir üst bilgisi vardır: Thread (<thread-id>):.
    • Yığın çerçeveleri formunu Module!Methodizler.
    • Yönetilmeyen koda geçişler çıkışta olduğu gibi [Native Frames] gösterilir.
    # comment
    Thread (0x1234):
      module!Method
      module!Method
    
    Thread (0x5678):
      [Native Frames]
      Module!Method
      Module!Method
    

Not

İşlemin durdurulması, çok büyük uygulamalar için uzun sürebilir (birkaç dakikaya kadar). Çalışma zamanının, işlev adlarını çözümlemek için yakalanan tüm yönetilen kod için tür ve yöntem bilgilerini göndermesi gerekir.

Sonraki adımlar