Comment faire un débogage électronique multi-cibles de manière transparente avec VSCode à l'aide du protocole hérité, électron 1.6.7, noeud v6.11.1, vscode 1.17 et firefox?

0

J'ai récemment lu l'article sur le débogage électronique multi-cibles avec VSCode dont l'URL est https://kwonoj.github.io/en/post/multi-target-dbg-electron-vscode/ et je l'ai fait fonctionner de manière transparente dans une machine virtuelle Oracle VM VirtuaBox. Gestionnaire contenant le système d'exploitation RedHat Linux 7.1 avec electron 1.8.2, node v8.9.4, vscode 1.17 et firefox à l'aide du protocole inspecteur. Voici mon launch.json qui définit les points d'arrêt dans main.js et main.cpp, un addon C ++ permettant de calculer si un entier est un nombre premier.

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type":"cppdbg",
            "program": "/home/hellodev/Downloads/node-v6.11.1-linux-x64/bin/node"
            "args": [
                "--inspect-brk=5858",
                "main.js"
            ],
            "request": "launch",
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "serverLaunchTimeout": 50000
        },
        {
            "type": "node",
            "request": "attach",
            "timeout":  10000,
            "name": "Attach Program",
            "port": 5858,
            "protocol": "inspector"
        },
        {
            "type":"node",
            "request":"launch",
            "name":"Electron Main",
            "runtimeExecutable":"/home/hellodev/node-cpp-addons/node_modules/electron/dist/electron"
            "protocol":"inspector"
         }

    ],
    "compounds": [
        {
            "name": "Server/Client",
            "configurations": ["Electron Main","(gdb) Launch","Attach Program"]
        }
    ]
}

Comment puis-je également étendre cet article dans le même Oracle VM VirtuaBox Manager contenant le système d’exploitation RedHat Linux 7.1 afin d’utiliser le protocole hérité, electron 1.6.7, node v6.11.1, vscode 1.17 et firefox, et quelle apparence donnerait la version révisée launch.json comme?

Sans succès, j'ai essayé une tâche de prelaunch électronique dont le fichier tasks.json est présenté ci-dessous. La raison pour laquelle j'ai essayé une tâche de prelaunch est que runtimeExecutable est réservé au protocole de l'inspecteur plutôt qu'au protocole hérité. Cependant, la tâche de pré-lancement entraîne une erreur d'exécution EADDRESSINUSE: port 5858.

{
    "version": "1.6.7",
    "command": "electron",
    "isShellCommand": true,
    "args": [

"--remote-debugging-port=5858",   
       "${workspaceRoot}/main.js",
    ]
}

et j'ai reçu le message d'erreur «Impossible de se connecter au processus d'exécution: motif: le socket s'est terminé par un tiers» lorsque j'ai utilisé le fichier launch.json suivant avec la flèche verte vscode pour exécuter une configuration de lancement composée.

"configurations": [
        {
            "name": "(gdb) Launch",
            "type":"cppdbg",
            "program": "/home/hellodev/Downloads/node-v6.11.1-linux-x64/bin/node"
            "args": [
               "--inspect-brk=5858",
                "main.js"
            ],
            "request": "launch",
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "serverLaunchTimeout": 50000
},
{
            "type": "node",
            "request": "attach",
            "timeout":  10000,
            "name": "Attach Program",
            "port": 5858,
            "protocol": "legacy"
         },
        {
            "type":"node",
            "request":"launch",
            "name":"Electron Main",
            "preLaunchTask": "electron",
            "protocol":"legacy", //Specify to use v8 inspector protocol
            "port": 5858,
            "timeout": 28000
         }


    ],
    "compounds": [
        {
            "name": "Server/Client",
            "configurations": ["Electron Main","(gdb) Launch","Attach Program"]
        }
    ]

}

[24 janvier 2018] @Andre Weinand, je montre ici mon plus récent fichier launch.json qui provoque le message d'erreur "Connexion impossible à l'exécution; assurez-vous que celle-ci est en mode de débogage" traditionnel "." afficher. J'ai essayé de suivre toutes vos recommandations précédentes, mais je rencontre toujours des problèmes. Par conséquent, lorsque je clique sur la flèche verte vscode correspondant à la configuration de lancement composée Server / Client, il lance "Electron Main" mais n'atteint pas les points d'arrêt GDB que j'ai définis dans main.cpp, qui est un addon C ++. Je comprends ce que vous dites sur l'insertion d'instructions de débogueur dans le code source de l'additif C ++, mais je préférerais ne pas le faire. Comment pourrais-je réparer mon launch.json?

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type":"cppdbg",
            "program": "/home/xyzdev/Downloads/node-v6.11.1-linux-x64/bin/node"
            "args": [
                "--debug=5858"
                "main.js"
            ],
            "request": "launch",
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
             "launchCompleteCommand": "None"

        },
        {
            "type": "node",
            "request": "attach",
            "timeout":  10000,
            "name": "Attach Program",
            "port": 5858,
            "protocol": "legacy"
        },
        {
            "type":"node",
            "request":"launch",
            "name":"Electron Main",
            "runtimeExecutable":"/home/xyzdev/node-cpp-addons/node_modules/electron/dist/electron",
            "runtimeArgs": [
                "${workspaceRoot}/main.js",
                "--remote-debugging-port" //Set debugging port for renderer process
            ],
            "protocol":"legacy"
         }


    ],
    "compounds": [
        {
            "name": "Server/Client",
            "configurations": ["Electron Main","(gdb) Launch","Attach Program"]
        }
    ]

}

[26 février 2018] @Andre Weinand, j'ai lu que vous aviez écrit le 10 mai 2017 dans l'article de github.com https://github.com/Microsoft/vscode/issues/26411 qui disait : "Vous pouvez utiliser l'un ou l'autre" hérité " ou protocole "inspecteur" pour les versions de noeud> 6.3 et <8.0, mais vous devez vous assurer que vous utilisez l'argument correspondant "--debug" ou "--inspect".

En passant, cette redondance dans la configuration de lancement sera corrigée dans la version de mai: vous n’aurez plus besoin de spécifier de port, seul le protocole fonctionnera correctement. "Étant donné que j'utilise la version 6.11.1 du noeud, qui est > 6.3 et <8.0, je me demandais si je pouvais basculer notre launch.json sur le protocole "inspecteur" au lieu du protocole "hérité" pour obtenir un débogage "en continu" comme je pouvais le faire avec le noeud 8.9.4? Merci

Franc
la source

Réponses:

2

L'attribut "protocole" détermine si le protocole "inspecteur" ou "hérité" est utilisé. Veuillez lire notre doc: https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_supported-nodelike-runtimes .

Vous ne pouvez pas exécuter deux sessions de débogage avec le même port de débogage en parallèle (ce que vous faites dans la dernière configuration de débogage décrite ci-dessus). Et il manque un "programme" ou "runtimeExecutable".

Je suggère de changer la valeur de l'attribut "protocole" dans la configuration la plus déboguée en "héritée" (en supposant que le protocole est le seul problème de cette configuration).

Andre Weinand
la source
J'apprécie votre réponse détaillée. Je me demande si je dois attribuer la valeur du protocole hérité à la configuration de débogage la plus haute (gdb) Launch. De plus, j'ai pu utiliser le même port de débogage (c'est-à-dire 5858) en parallèle lors de l'exécution avec le protocole d'inspecteur plutôt qu'avec le protocole hérité. Puis-je demander quels ports je devrais choisir pour éviter l'erreur EADDRESSINUSE? Merci.
Frank
Dans ma hâte de poser la question initiale, j'ai peut-être oublié le fait que j'ai utilisé une configuration de lancement composée dans laquelle Electron Main et (gdb) Launch and Attach Program se déroulent de manière séquentielle plutôt qu'en parallèle. Merci d'avoir attiré mon erreur avec la tâche de pré-lancement qui se déroule en parallèle,
Frank
Je viens d'accepter votre belle réponse. Doit-on explicitement permettre au navigateur Firefox d'être devtools.chrome.enabled en utilisant about: config afin que vscode puisse capitaliser sur le protocole hérité de débogage de Chrome v8? Merci,
Frank
Votre configuration "cppdbg" n'implique pas le débogage de node.js. Donc, utiliser l'attribut "protocole" n'a pas de sens (et n'est pas supporté comme vous pouvez le découvrir en l'utilisant: vous verrez une erreur onduler). Toutefois, la configuration "cppdbg" lance le fichier node.js et, puisque vous passez un "--inspect-brk = 5858", vous l'avez configuré pour le débogage en mode "inspecteur". Si vous souhaitez utiliser une autre session de débogage avec ce nœud, vous devez utiliser des protocoles correspondants. Ainsi, pour le protocole "hérité", ne démarrez pas le premier noeud avec un "--inspect ..." mais utilisez un argument "--debug".
Andre Weinand
Vous pouvez utiliser n'importe quel port de débogage gratuit. Pour votre première configuration "cppdbg", je vous suggère de spécifier explicitement un port (ce que vous faites déjà) car il doit correspondre à un port dans une autre configuration de lancement ("Attach Program", je suppose). Dans votre dernière config de lancement "Electron Main", je suggère de ne pas spécifier de port. Dans ce cas, VS Code sélectionne automatiquement un port libre.
Andre Weinand