web-dev-qa-db-fra.com

Un débogueur interactif étape par étape pour Rust?

Comment puis-je déboguer Rust l'application étape par étape de manière interactive comme je suis capable de le faire avec "pry" en Ruby?

Je veux pouvoir voir et modifier de préférence les variables en temps réel lorsque j'atteins un point de rupture. Existe-t-il un projet prêt à la production?

42
user6324692

Je trouve un bon niveau de convivialité avec VS Code et l'extension CodeLLDB :

  1. Installer le code VS
  2. Rechercher et installer Rust (rls) depuis VS Code
  3. Installer LLDB
  4. Rechercher et installer CodeLLDB depuis VS Code
  5. Le débogueur LLDB a ajouté l’élément de menu principal "Débogage" à partir duquel le débogueur peut être démarré. Lorsque le débogage est lancé pour la première fois, vous devez sélectionner l'environnement (le débogueur): sélectionnez LLDB.
  6. Lorsque vous sélectionnez LLDB, un fichier launch.json Sera ouvert, sinon ouvrez-le, il se trouve sous le dossier .vscode
  7. Votre launch.json Devrait ressembler à ceci:

    {
        // Use IntelliSense to learn about possible attributes.
        // Hover to view descriptions of existing attributes.
        // For more information, visit: https://go.Microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "type": "lldb",
                "request": "launch",
                "name": "Debug",
                "program": "${workspaceRoot}/target/debug/hello_world",
                "args": [],
                "cwd": "${workspaceRoot}/target/debug/",
                "sourceLanguages": ["Rust"]
            }
        ]
    }
    
  1. Si vous souhaitez conserver les éléments génériques et ne compiler qu'un fichier binaire correspondant au nom du dossier cargo, vous pouvez utiliser la substitution de variable $ {workspaceRootFolderName} pour la clé "programme":

    {
        "version": "0.2.0",
        "configurations": [
            {
                "type": "lldb",
                "request": "launch",
                "name": "Debug",
                "program": "${workspaceRoot}/target/debug/${workspaceRootFolderName}",
                "args": [],
                "cwd": "${workspaceRoot}/target/debug/",
                "sourceLanguages": ["Rust"]
            }
        ]
    }
    

Voici quelques articles de blog sur Rust et VS Code:

23
Cirelli94

Le compilateur Rust génère des binaires natifs avec des informations de débogage natives, comme le fera tout débogueur natif. Cela signifie que gdb et lldb, ou Windows Si vous utilisez la version MSVC ABI de Rust, si vous voulez une expérience intégrée, RustDT est le chemin à parcourir (configuration sous Windows: Comment configurer GDB pour le débogage Rust programmes sous Windows? ) .Veuillez noter que vous risquez de vous heurter à Comment puis-je inspecter les valeurs de variables lors du débogage de MSVC ABI = Rust programmes? sous Windows et https://github.com/Rust-lang/Rust/issues/33062 sur un Mac.

18
cynic

Pour un débogueur graphique, il existe gdbgui . Il est disponible pour Linux, Windows et MacOS. Il utilise le navigateur comme écran et pour interagir avec le débogueur.

6
psiphi75

J'ai gdb 7.11 et la commande Rust-gdb semble donner plus d'informations pertinentes à Rust = Rust). Par exemple, Rust-gdb affiche Rust objets correctement Les noms, et gdb ne les montrent tout simplement pas.
Dans l'exemple suivant, gdb afficherait maintenant toutes les parties en gras.

$ 1 = Args = {intérieure = ArgsOs = {intérieure = Args = {iter = IntoIter = {buf = Non null = = {pointeur = non nul <* const std :: ffi :: os_str :: OsString> = {0x7ffff6c20060}}, fantôme = PhantomData, cap = 1, ptr = 0x7ffff6c20060, end = 0x7ffff6c20078}, _dont_send_or_sync_me = PhantomData <* mut ()>}}}

0
Otuk