Aracılığıyla paylaş


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 semboller aracılığıyla çözümleme 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 izleme bilgisini 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

Stack izlerinin toplanabileceği 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. Komut satırı bağımsız değişkenleri varsa, bunlar dotnet-stack sürüm 6.0.320703 ve sonraki sürümlerde 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 sembolleme

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

Yönetilen yığınları dotnet-stack kullanarak 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, Linux'ta ps 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[])
    

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

    • Çıktıdaki açıklamalara # ön eki eklenir.
    • Her iş parçacığının, yerel iş parçacığı kimliği içeren bir başlığı vardır: Thread (<thread-id>):.
    • Yığın çerçeveleri Module!Method şeklini izler.
    • Yönetilmeyen koda geçişler çıkışta [Native Frames] olarak 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