Поделиться через


Установка и использование LLDB в Linux

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 работающему на компьютере.

  1. 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.

  2. Запустите 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)
    
  3. В командной строке (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

  4. Выполнение примера команды

    Команда 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 для получения дополнительных сведений об установке и использовании средства загрузки символов.