Bagikan melalui


Memeriksa pelacakan tumpukan terkelola (dotnet-stack)

Artikel ini berlaku untuk: ✔️ versi 5.0.221401 dotnet-stack dan versi yang lebih baru

Instal

Ada dua cara untuk mengunduh dan menginstal dotnet-stack:

Sinopsis

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

Deskripsi

Alat dotnet-stack:

  • Adalah alat .NET Core lintas platform.
  • Ambil dan cetak tumpukan terkelola untuk semua alur dalam proses .NET target.
  • Manfaatkan pelacakan EventPipe yang disediakan oleh runtime .NET Core.

Opsi

  • -h|--help

    Tampilkan bantuan baris perintah.

  • --version

    Tampilkan versi utilitas dotnet-stack.

Perintah

Perintah Deskripsi
laporan dotnet-stack Mencetak jejak tumpukan untuk setiap alur dalam proses target.
dotnet-stack ps Mencantumkan proses dotnet tempat jejak tumpukan dapat dikumpulkan.
simbolikasi dotnet-stack Dapatkan nomor baris dari Token Metode dan Offset IL dalam stacktrace.

laporan dotnet-stack

Mencetak jejak tumpukan untuk setiap alur dalam proses target.

Sinopsis

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

Opsi

  • -n, --name <name>

    Nama proses untuk melaporkan tumpukan dari.

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

    ID proses untuk melaporkan tumpukan dari.

dotnet-stack ps

Mencantumkan proses dotnet tempat jejak tumpukan dapat dikumpulkan. Versi 6.0.320703 dotnet-stack dan versi yang lebih baru juga menampilkan argumen baris perintah yang digunakan setiap proses, jika tersedia.

Sinopsis

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

Contoh

Misalkan Anda memulai aplikasi yang berjalan lama menggunakan perintah dotnet run --configuration Release. Di jendela lain, Anda menjalankan perintah dotnet-stack ps. Output yang akan Anda lihat adalah sebagai berikut. Argumen baris perintah, jika ada, ditampilkan di versi 6.0.320703 dotnet-stack dan yang lebih baru.

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

simbolikasi dotnet-stack

Dapatkan nomor baris dari Token Metode dan Offset IL dalam stacktrace.

Sinopsis

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

Opsi

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

    Jalur beberapa direktori dengan rakitan dan pdb.

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

    Output langsung ke file.

  • -c, --stdout

    Output langsung ke konsol.

Contoh

> 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

Melaporkan tumpukan terkelola dengan dotnet-stack

Untuk melaporkan tumpukan terkelola menggunakan dotnet-stack:

  • Dapatkan pengidentifikasi proses (PID) dari aplikasi .NET Core untuk melaporkan tumpukan.

    • Di Windows, Anda dapat menggunakan Manajer Tugas atau perintah tasklist, misalnya.
    • Di Linux, misalnya, perintah ps.
    • dotnet-stack ps
  • Jalankan perintah berikut:

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

    Perintah sebelumnya menghasilkan output yang mirip dengan berikut ini:

    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[])
    

    Output dari dotnet-stack mengikuti bentuk berikut:

    • Komentar dalam output diawali dengan #.
    • Setiap alur memiliki header yang menyertakan ID alur asli: Thread (<thread-id>):.
    • Bingkai tumpukan mengikuti bentuk Module!Method.
    • Transisi ke kode tak terkelola direpresentasikan sebagai [Native Frames] dalam output.
    # comment
    Thread (0x1234):
      module!Method
      module!Method
    
    Thread (0x5678):
      [Native Frames]
      Module!Method
      Module!Method
    

Catatan

Menghentikan proses dapat memakan waktu lama (hingga beberapa menit) untuk aplikasi yang sangat besar. Runtime perlu mengirimkan informasi jenis dan metode untuk semua kode terkendali yang diambil untuk menyelesaikan nama fungsi.

Langkah berikutnya