Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Эта статья относится к версиям ✔️ dotnet-stack 5.0.221401 и более поздних версий.
Установка
Есть два способа загрузки и установки dotnet-stack:
Глобальный инструмент dotnet:
Чтобы установить последнюю версию пакета
dotnet-stackNuGet, используйте команду dotnet tool install.dotnet tool install --global dotnet-stackПрямое скачивание:
скачайте исполняемый файл средства, соответствующий вашей платформе:
ОС Платформа Виндоус x86 | x64 | Arm | Arm-x64 Линукс x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Краткие сведения
dotnet-stack [-h, --help] [--version] <command>
Описание
Инструмент dotnet-stack:
- это кроссплатформенное средство .NET Core.
- Оно сканирует и выводит управляемые стеки для всех потоков в целевом процессе .NET.
- Средство использует трассировку
EventPipe, обеспечиваемую средой выполнения .NET Core.
Параметры
-h|--helpПоказать справку в командной строке.
--versionОтображение версии служебной программы dotnet-stack.
Команды
| Команда | Описание |
|---|---|
| Отчет dotnet-stack | Выводит трассировку стека для каждого потока в целевом процессе. |
| dotnet-stack ps | Перечисляет процессы dotnet, из которых можно собирать трассировки стека. |
| символьная символика dotnet-stack | Извлеките номер строки из маркера метода и IL смещения в стек-трейсе. |
Отчет dotnet-stack
Выводит трассировку стека для каждого потока в целевом процессе.
Краткие сведения
dotnet-stack report -p|--process-id <pid>
-n|--name <process-name>
[-h|--help]
Параметры
-n, --name <name>Имя процесса, из которого нужно сообщить о стеке.
-p|--process-id <PID>Идентификатор процесса, из которого нужно сделать отчет о стеке.
dotnet-stack ps
Выводит список процессов dotnet, из которыми можно собирать трассировки стека.
dotnet-stack версии 6.0.320703 и более поздние также отображают аргументы командной строки, с которыми был запущен каждый процесс, если они доступны.
Краткие сведения
dotnet-stack ps [-h|--help]
Пример
Предположим, что вы запускаете длинное приложение с помощью команды dotnet run --configuration Release. В другом окне выполните dotnet-stack ps команду. Выходные данные, которые вы увидите, приведены ниже. Аргументы командной строки, если таковые имеются, отображаются в dotnet-stack версии 6.0.320703 и более поздних версий.
> dotnet-stack ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
символьная символика dotnet-stack
Извлеките номер строки из токена метода и смещения IL в стековом трассировщике.
Краткие сведения
dotnet-stack symbolicate <input-path> [-d|--search-dir] [-o|--output] [-c|--stdout] [-h|--help]
Параметры
-d, --search-dir <directory1 directory2 ...>Путь к нескольким директориям со сборками и pdb-файлами.
-o, --output <output-path>Выводить данные непосредственно в файл.
-c, --stdoutВывод непосредственно в консоль.
Пример
> 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
Получение отчета об управляемых стеках с помощью dotnet-stack
Чтобы получить отчет об управляемых стеках с помощью dotnet-stack, сделайте следующее.
Узнайте идентификатор процесса (PID) приложения .NET Core, чтобы сообщать о стеках.
- В Windows его можно получить, например, через диспетчер задач или с помощью команды
tasklist. - В Linux можно использовать, например, команду
ps. - dotnet-stack ps
- В Windows его можно получить, например, через диспетчер задач или с помощью команды
Выполните следующую команду:
dotnet-stack report --process-id <PID>Приведенная выше команда создает выходные данные наподобие следующих:
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[])dotnet-stackвыведет следующие данные:- у комментариев в выходных данных будет префикс
#; - у каждого потока будет заголовок, содержащий идентификатор собственного потока:
Thread (<thread-id>):; - у кадров стеков будет следующий формат:
Module!Method; - переходы к неуправляемому коду будут представлены в выходных данных как
[Native Frames].
# comment Thread (0x1234): module!Method module!Method Thread (0x5678): [Native Frames] Module!Method Module!Method- у комментариев в выходных данных будет префикс
Примечание.
Остановка процесса может занять много времени (до нескольких минут) для очень крупных приложений. Среда выполнения должна передавать сведения о типе и методе для всего управляемого кода, который был захвачен для разрешения названий функций.