Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья относится к версиям 0.0.710501 и более поздних версий. ✔️ dotnet-debug
Замечание
dotnet-debug В настоящее время поддерживается только приложения на основе CoreCLR и в настоящее время не поддерживается в macOS.
Install
Есть два способа загрузки и установки dotnet-debug:
Средство dotnet global:
Чтобы установить последнюю версию
dotnet-debug, используйте команду dotnet tool install.dotnet tool install --global dotnet-debugПрямое скачивание:
скачайте исполняемый файл средства, соответствующий вашей платформе:
OS Platform Виндоус x86 x64 Arm-x64 Arm-x64 | Линукс x64 Arm64 | | musl-x64 musl-arm64 |
Synopsis
dotnet-debug [-h|--help] [--version] <command>
Description
Глобальное dotnet-debug средство позволяет подключаться к динамическим процессам .NET и анализировать файлы дампа в интерактивном режиме. В отличие dotnet-dumpот того, что основное внимание уделяется сбору дампов и автономному анализу, dotnet-debug предназначено для динамической проверки процессов. Она поддерживает все те же команды отладки SOS , что и dotnet-dumpкоманды.
Это средство полезно на таких платформах, как Alpine Linux, где полностью lldb недоступен. Средство dotnet-debug запускает команды SOS для анализа управляемого состояния и диагностики кучи, но это не собственный отладчик, поэтому отображение собственных кадров стека не поддерживается.
Options
--versionОтображает версию программы dotnet-debug.
-h|--helpОтображение справки в командной строке.
Commands
| Command |
|---|
| подключение dotnet-debug |
| dotnet-debug open-dump |
подключение dotnet-debug
Присоединяется к динамическому процессу и запускает интерактивную оболочку с командами отладки для изучения.
Synopsis
dotnet-debug attach <process-id> [-c|--commands <debug_command>] [--accept-license-agreement]
Arguments
<process-id>Идентификатор процесса для присоединения к нему и анализа.
Options
-c|--commands <debug_command>Выполняет команды при запуске. Несколько экземпляров этого параметра можно использовать в вызове к командам цепочки. Команды выполняются в порядке, который они предоставляются в командной строке. Если вы хотите
dotnet-debugвыйти после выполнения команд, последняя команда должна бытьexit.--accept-license-agreementПринимает соглашение о лицензировании без запроса.
Example
Присоединение к работающему процессу с идентификатором 1234:
$ dotnet-debug attach 1234
Attaching to process: 1234 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Выполните команду при подключении и выходе:
dotnet-debug attach 1234 -c clrstack -c exit
dotnet-debug open-dump
Запускает интерактивную оболочку с командами отладки для изучения файла дампа.
Synopsis
dotnet-debug open-dump <dump_path> [-c|--commands] [--accept-license-agreement]
Arguments
<dump_path>Путь к файлу дампа для анализа.
Options
-c|--commands <debug_command>Выполняет команды при запуске. Несколько экземпляров этого параметра можно использовать в вызове к командам цепочки. Команды выполняются в порядке, который они предоставляются в командной строке. Если вы хотите
dotnet-debugвыйти после выполнения команд, последняя команда должна бытьexit.--accept-license-agreementПринимает соглашение о лицензировании без запроса.
Example
Откройте и проанализируйте файл дампа:
$ dotnet-debug open-dump ./core_20260209_135837
Loading dump: ./core_20260209_135837 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Отладка команд SOS
Обе attachopen-dump команды содержат интерактивный сеанс, принимаюющий следующие команды SOS.
| Command | Функция |
|---|---|
analyzeoom |
Отображает сведения о последнем объекте OOM, возникшем в запросе на выделение кучи GC. |
clrmodules |
Перечисляет управляемые модули в процессе. |
clrstack |
Обеспечивает трассировку стека только для управляемого кода. |
clrthreads |
Перечисляет управляемые потоки, которые выполняются. |
clru |
Отображение дизассемблированного кода с аннотациями для управляемого метода. |
d или readmemory |
Дамп содержимого памяти. |
dbgout |
Включает или отключает-off внутреннее ведение журнала SOS. |
dso |
Отображает все управляемые объекты, обнаруженные в пределах границ текущего стека. |
dumpalc |
Отображает сведения о коллекционируемом assemblyLoadContext, в который загружается указанный объект. |
dumparray |
Отображает сведения об управляемом массиве. |
dumpasync |
Отображение сведений об асинхронных конечных автоматах для кучи со сборкой мусора. |
dumpassembly |
Отображение сведений о сборке. |
dumpclass |
Отображение сведений о структуре EEClass, находящейся по указанному адресу. |
dumpconcurrentdictionary |
Отображает параллельное содержимое словаря. |
dumpconcurrentqueue |
Отображает содержимое параллельной очереди. |
dumpdelegate |
Отображение сведений о делегате. |
dumpdomain |
Отображает сведения обо всех сборках в пределах всех доменов приложений или указанных. |
dumpgcdata |
Отображает сведения о данных GC. |
dumpgen |
Отображает содержимое кучи для указанного поколения. |
dumpheap |
Отображение сведений о куче со сборкой мусора и статистики сборки мусора по объектам. |
dumpil |
Отображает общий промежуточный язык (CIL), связанный с управляемым методом. |
dumplog |
Записывает в указанный файл содержимое журнала нагрузок, хранящегося в памяти. |
dumpmd |
Отображение сведений о структуре MethodDesc, находящейся по указанному адресу. |
dumpmodule |
Отображение сведений о модуле, находящемся по указанному адресу. |
dumpmt |
Отображение сведений о таблице методов, расположенной по указанному адресу. |
dumpobj |
Отображение сведений об объекте, находящемся по указанному адресу. |
dumpruntimetypes |
Находит все объекты System.RuntimeType в куче GC и печатает имя типа и MethodTable, на которые они ссылаются. |
dumpsig |
Дамп подписи метода или поля, указанного в <sigaddr> <moduleaddr>. |
dumpsigelem |
Дамп одного элемента объекта сигнатуры. |
dumpstackobjects |
Отображает все управляемые объекты, обнаруженные в пределах границ текущего стека. |
dumpvc |
Отображает сведения о полях класса значений. |
eeheap |
Отображение сведений о памяти процессов, занятой внутренними структурами данных среды выполнения. |
eestack |
Выполнение команды dumpstack для всех потоков в составе процесса. |
eeversion |
Отображает сведения о версиях среды выполнения и SOS. |
ehinfo |
Отображает блоки обработки исключений в методе JIT-ed. |
exit или quit |
Выход из интерактивного режима. |
finalizequeue |
Отображает все объекты, зарегистрированные для заключительной обработки. |
findappdomain |
Пытается устранить домен приложения объекта GC. |
gchandles |
Отображает статистику дескрипторов сборщика мусора в составе процесса. |
gcheapstat |
Отображает статистику о сборщике мусора. |
gcinfo |
Отображает кодировку JIT GC для метода. |
gcroot |
Отображение сведений о ссылках (или корневых элементах) объекта, который расположен по указанному адресу. |
gcwhere |
Отображает расположение в куче GC указанного адреса. |
histclear |
Освобождение всех ресурсов, используемых семейством команд Hist. |
histinit |
Инициализирует структуры SOS из журнала нагрузки, сохраненного в отлаживаемом объекте. |
histobj |
Проверяет все записи перемещений журнала стресса и отображает цепочку перемещения сборки мусора, которая могла привести к адресу, переданном в качестве аргумента. |
histobjfind |
Отображение всех записей журнала, ссылающихся на объект по указанному адресу. |
histroot |
Отображает сведения о повышениях и перемещениях указанного корневого элемента. |
histstats |
Отображает статистику журнала стресса. |
ip2md |
Отображает структуру MethodDesc по указанному адресу в коде после его JIT-компиляции. |
listnearobj |
Отображает предыдущий объект и успешное выполнение указанного адреса. |
logopen |
Включает ведение журнала файлов консоли. |
logclose |
Отключает ведение журнала файлов консоли. |
logging |
Включает или отключает внутреннее ведение журнала SOS. |
lm или modules |
Отображение выполняемых собственных модулей. |
name2ee |
Отображение структур MethodTable и EEClass для указанного типа или метода в указанном модуле. |
objsize |
Отображает размер указанного объекта. |
parallelstacks |
Отображает стек объединенных потоков аналогично панели "Параллельные стеки" Visual Studio. |
pathto |
Отображает путь к GC от <root><target>. |
pe или printexception |
Отображает и форматирует поля всех производных объектов класса Exception, находящегося по указанному адресу. |
r или registers |
Отображает регистры потока. |
runtimes |
Выводит список сред выполнения в целевом объекте или изменяет среду выполнения по умолчанию. |
setclrpath |
Задает путь для загрузки файлов dac/dbi coreclr с помощью setclrpath <path>. |
setsymbolserver |
Включение поддержки сервера символов. |
sos |
Выполняет различные команды отладки coreclr. Используйте синтаксис sos <command-name> <args>. Дополнительные сведения см. в этой записи soshelp. |
soshelp или help |
Отображает все доступные команды. |
soshelp <command> или help <command> |
Отображение сведений об указанной команде. |
syncblk |
Отображение сведений о заполнителе SyncBlock. |
taskstate |
Отображает состояние задачи в удобочитаемом формате. |
threadpool |
Отображает сведения о пуле потоков среды выполнения. |
threadpoolqueue |
Отображает рабочие элементы пула потоков очереди. |
threadstate |
Довольно печатает значение состояния потоков. |
threads <threadid> или setthread <threadid> |
Отображение или изменение идентификатора текущего потока для команд SOS. |
timerinfo |
Отображает сведения о выполнении таймеров. |
token2ee |
Отображает структуру MethodTable и структуру MethodDesc для указанного токена и модуля. |
traverseheap |
Записывает данные кучи в файл в формате, понятном профилировщиком СРЕДЫ CLR. |
verifyheap |
Проверяет кучу GC на наличие признаков повреждения. |
verifyobj |
Проверяет объект, передаваемый в качестве аргумента, на наличие повреждений. |
Замечание
Дополнительные сведения см. в разделе о расширении отладки SOS для .NET.
Использование dotnet-debug для присоединения к динамическому процессу
В следующем примере показано, как подключиться к работающему процессу .NET и исследовать проблему пула потоков:
$ dotnet-debug attach 1902
Attaching to process: 1902 ...
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Это действие открывает интерактивный сеанс, который принимает команды следующего вида:
> clrstack
OS Thread Id: 0x573d (0)
Child SP IP Call Site
00007FFD28B42C58 00007fb22c1a8ed9 [HelperMethodFrame_PROTECTOBJ: 00007ffd28b42c58] System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.Program.Foo4(System.String)
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.Program.Foo2(Int32, System.String)
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.Program.Foo1(Int32, System.String)
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.Program.Main(System.String[])
Чтобы увидеть необработанное исключение:
> pe -lines
Exception object: 00007fb18c038590
Exception type: System.Reflection.TargetInvocationException
Message: Exception has been thrown by the target of an invocation.
InnerException: System.Exception, Use !PrintException 00007FB18C038368 to see more.
StackTrace (generated):
SP IP Function
00007FFD28B42DD0 0000000000000000 System.Private.CoreLib.dll!System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Private.CoreLib.dll!System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+0xa7
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.dll!SymbolTestApp.Program.Foo4(System.String)+0x15d
StackTraceString: <none>
HResult: 80131604
dotnet-debug и dotnet-dump
dotnet-debug и dotnet-dump совместно использовать те же команды отладки SOS, но служат различным основным целям:
| Функция | dotnet-debug |
dotnet-dump |
|---|---|---|
| Присоединение к динамическому процессу | ✔️ | ❌ |
| Сбор дампов | ❌ | ✔️ |
| Анализ файлов дампа | ✔️ | ✔️ |
Перечисление процессов .NET (ps) |
❌ | ✔️ |
Используйте dotnet-debug при необходимости интерактивной отладки динамического процесса. Используйте dotnet-dump , когда необходимо собирать дампы или анализировать их в автономном режиме.
См. также
- Служебная программа сбора и анализа дампа (dotnet-dump)
- Отладочное расширение SOS для .NET
- Средство анализа кучи (dotnet-gcdump)