Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.
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.
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, commelldb-3.9
.$ lldb Current symbol store settings: -> Cache: /home/username/.dotnet/symbolcache -> Server: https://msdl.microsoft.com/download/symbols/ Timeout: 4 RetryCount: 0 (lldb)
À 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
.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.