Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
LLDB — это мощный отладчик с открытым исходным кодом, который является частью проекта LLVM. При отладке приложений .NET в Linux можно использовать LLDB с расширениями отладчика .NET для проверки состояния управляемого приложения. LLDB может работать как с дампами, так и с динамическими процессами.
Установка
Установка LLDB
Для расширений отладчика .NET требуется по крайней мере LLDB 3.9, но рекомендуется использовать версию 10.0 или более позднюю. В следующих разделах приведены инструкции по установке LLDB в популярных дистрибутивах Linux.
AzureLinux 2.0 и более поздних версий
Чтобы установить пакеты LLDB, выполните следующие действия.
sudo tdnf install lldb
Чтобы запустить LLDB, выполните приведенные действия.
lldb
Ubuntu 20.04 и более поздних версий
Чтобы установить пакеты LLDB, выполните следующие действия.
sudo apt-get update
sudo apt-get install lldb
Чтобы запустить LLDB, выполните приведенные действия.
lldb
Alpine 3.9 и более поздние версии
Чтобы установить пакеты LLDB, выполните следующие действия.
apk update
apk add lldb py3-lldb
Чтобы запустить LLDB, выполните приведенные действия.
lldb
Debian 9 и более поздних версий
Чтобы установить пакеты LLDB, выполните следующие действия.
sudo apt-get install lldb-3.9 python-lldb-3.9
Чтобы запустить LLDB, выполните приведенные действия.
lldb-3.9
Fedora 29 и более поздних версий
Чтобы установить пакеты LLDB, выполните следующие действия.
sudo dnf install lldb python2-lldb
Чтобы запустить LLDB, выполните приведенные действия.
lldb
RHEL 7.5 и более поздних версий
См. страницу LLDB на веб-сайте RedHat.
Установка расширений отладчика .NET
Установите расширения отладчика .NET с помощью средства установки dotnet-debugger-extensions . Установщик создает .lldbinit файл в домашнем каталоге, который автоматически загружает расширения при запуске LLDB.
Примечание.
Версия расширений отладчика не должна соответствовать версии среды выполнения .NET. Рекомендуется использовать последнюю версию расширения.
Примечание.
Установка с dotnet-sos вместо dotnet-debugger-extensions также работает, но устанавливает только подмножество команд расширения.
Начало работы с LLDB
В этом примере показано использование LLDB для подключения к уже существующему приложению .NET ,dotnet webapp.dll работающему на компьютере.
psИспользуйте команду, чтобы найти идентификатор процесса (PID) приложения .NET, которое требуется выполнить отладку.$ ps -ao pid,cmd PID CMD 697 -bash 229233 dotnet webapp.dll 229696 ps -ao pid,cmd ... other processes omitted for brevity ...В этом случае PID приложения .NET для отладки равен 229233.
Запустите LLDB и подключитесь к процессу.
Запустите LLDB с помощью соответствующей команды для дистрибутива (показанная ранее в разделе "Установка LLDB "). Часто это просто
lldb, но некоторые дистрибутивы требуют номер версии в имени, напримерlldb-3.9.$ lldb Current symbol store settings: -> Cache: /home/username/.dotnet/symbolcache -> Server: https://msdl.microsoft.com/download/symbols/ Timeout: 4 RetryCount: 0 (lldb)В командной строке
(lldb)выполните команду присоединения процесса.(lldb) process attach --pid 229233 Process 229233 stopped * thread #1, name = 'dotnet', stop reason = signal SIGSTOP frame #0: 0x00007f2ca7c11117 libc.so.6`___lldb_unnamed_symbol3457 + 231 libc.so.6`___lldb_unnamed_symbol3457: -> 0x7f2ca7c11117 <+231>: movl %r12d, %edi 0x7f2ca7c1111a <+234>: movq %rax, %rbx 0x7f2ca7c1111d <+237>: callq 0x7f2ca7c10a60 ; ___lldb_unnamed_symbol3445 0x7f2ca7c11122 <+242>: jmp 0x7f2ca7c11089 ; <+89> thread #2, name = 'dotnet-ust', stop reason = signal SIGSTOP frame #0: 0x00007f2ca7c9e88d libc.so.6`syscall + 29 libc.so.6`syscall: ... more output omitted ...Теперь отладчик подключен и можно использовать встроенные команды LLDB и команды расширения отладчика .NET для проверки состояния процесса.
Примечание.
Если LLDB выводит "ошибка: присоединение не выполнено: операция не разрешена", это означает, что у вас нет достаточных привилегий для отладки. Самый надежный способ устранить эту проблему — выйти из LLDB и перезапустить с помощью sudo. Если функция LLDB с повышенными привилегиями не будет автоматически выполнять обычный скрипт lldbinit, это можно сделать явным образом с помощью аргумента
--sourceв командной строке:sudo lldb --source ~/.lldbinitВыполнение примера команды
Команда clrstack отображает трассировку стека для кода .NET в выбранном потоке.
(lldb) clrstack OS Thread Id: 0x497 (1) Child SP IP Call Site 00007FFD0877D260 00007f2ca7c11117 [HelperMethodFrame_1OBJ: 00007ffd0877d260] System.Threading.Monitor.ObjWait(Int32, System.Object) 00007FFD0877D390 00007F2C2864AA0E System.Threading.Monitor.Wait(System.Object, Int32) 00007FFD0877D3A0 00007F2C28654625 System.Threading.ManualResetEventSlim.Wait(Int32, System.Threading.CancellationToken) 00007FFD0877D420 00007F2C286684A8 System.Threading.Tasks.Task.SpinThenBlockingWait(Int32, System.Threading.CancellationToken) 00007FFD0877D480 00007F2C2866832D System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) 00007FFD0877D4D0 00007F2C286B2508 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task, System.Threading.Tasks.ConfigureAwaitOptions) 00007FFD0877D4F0 00007F2C29281B45 Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(Microsoft.Extensions.Hosting.IHost) 00007FFD0877D510 00007F2C29121A7D Program.<Main>$(System.String[]) [/home/username/app/Program.cs @ 25]
Дальнейшие действия
Дополнительные сведения о командах, доступных при отладке приложений .NET с помощью LLDB, см. в документации по расширениям отладчика .NET и LLDB.
См. также
- LLDB для получения дополнительных сведений об отладчике LLDB.
- Расширения отладчика .NET для ссылки на доступные команды расширения.
- Dotnet-symbol для получения дополнительных сведений об установке и использовании средства загрузки символов.