Partager via


Installer et utiliser LLDB sur Linux

LLDB est un débogueur open source puissant qui fait partie du projet LLVM. Lorsque vous déboguez des applications .NET sur Linux, vous pouvez utiliser LLDB avec les extensions de débogueur .NET pour inspecter l’état de l’application managée. LLDB peut utiliser les vidages et les processus en direct.

Installez

Installer LLDB

Les extensions du débogueur .NET nécessitent au moins LLDB 3.9, mais la version 10.0 ou ultérieure est recommandée. Les sections suivantes fournissent des instructions pour installer LLDB sur des distributions Linux populaires.

AzureLinux 2.0 et versions ultérieures

Pour installer les packages LLDB :

    sudo tdnf install lldb

Pour lancer LLDB :

    lldb

Ubuntu 20.04 et versions ultérieures

Pour installer les packages LLDB :

    sudo apt-get update
    sudo apt-get install lldb

Pour lancer LLDB :

    lldb

Alpine 3.9 et versions ultérieures

Pour installer les packages LLDB :

    apk update
    apk add lldb py3-lldb

Pour lancer LLDB :

    lldb

Debian 9 et versions ultérieures

Pour installer les packages LLDB :

    sudo apt-get install lldb-3.9 python-lldb-3.9

Pour lancer LLDB :

    lldb-3.9

Fedora 29 et versions ultérieures

Pour installer les packages LLDB :

    sudo dnf install lldb python2-lldb

Pour lancer LLDB :

    lldb

RHEL 7.5 et versions ultérieures

Consultez LLDB sur le site web de RedHat.

Installer les extensions du débogueur .NET

Installez les extensions du débogueur .NET à l’aide de l’outil d’installation dotnet-debugger-extensions . Le programme d’installation crée un .lldbinit fichier dans votre répertoire de base qui charge automatiquement les extensions lorsque vous démarrez LLDB.

Remarque

La version des extensions du débogueur n’a pas besoin de correspondre à la version du runtime .NET. Nous vous recommandons d’utiliser la dernière version de l’extension.

Remarque

L’installation avec dotnet-sos au lieu de dotnet-debugger-extensions fonctionne également, mais installe uniquement un sous-ensemble des commandes d’extension.

Prise en main de LLDB

Cet exemple montre comment utiliser LLDB pour attacher une application .NET préexistante (dotnet webapp.dll) qui s’exécute sur l’ordinateur.

  1. Utilisez la ps commande pour rechercher l’ID de processus (PID) de l’application .NET que vous souhaitez déboguer.

        $ ps -ao pid,cmd
        PID CMD
        697 -bash
        229233 dotnet webapp.dll
        229696 ps -ao pid,cmd
        ... other processes omitted for brevity ...
    

    Dans ce cas, le PID de l’application .NET à déboguer est 229233.

  2. Exécutez LLDB et joignez-vous au processus.

    Lancez LLDB à l’aide de la commande appropriée pour votre distribution (illustrée précédemment dans la section Installer LLDB ). Souvent, c’est juste lldb, mais certaines distributions nécessitent un numéro de version dans le nom, comme 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. À l’invite (lldb) , exécutez la commande d’attachement de processus.

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

    Le débogueur est maintenant attaché et vous pouvez utiliser les commandes LLDB intégrées et les commandes d’extension du débogueur .NET pour inspecter l’état du processus.

    Remarque

    Si LLDB génère « erreur : échec de l’attachement : opération non autorisée », cela signifie que vous n’avez pas suffisamment de privilèges pour déboguer. La méthode la plus fiable pour résoudre ce problème consiste à quitter LLDB et redémarrer à l’aide de sudo. Lorsque llDB avec élévation de privilèges n’exécute pas automatiquement le script .lldbinit normal, vous pouvez le faire explicitement à l’aide de l’argument --source sur la ligne de commande : sudo lldb --source ~/.lldbinit.

  4. Exécuter un exemple de commande

    La commande clrstack affiche la trace de pile pour le code .NET sur le thread actuellement sélectionné.

        (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]
    

Étapes suivantes

Pour en savoir plus sur les commandes disponibles lors du débogage d’applications .NET avec LLDB, consultez la documentation relative aux extensions de débogueur .NET et LLDB.

Voir aussi

  • LLDB pour plus d’informations sur le débogueur LLDB.
  • Extensions de débogueur .NET pour une référence des commandes d’extension disponibles.
  • dotnet-symbol pour plus d’informations sur l’installation et l’utilisation de l’outil de téléchargement de symboles.