Wie kann man Electron-Debugging mit VSCode unter Verwendung des älteren Protokolls, Elektron 1.6.7, Knoten v6.11.1, vscode 1.17 und Firefox nahtlos ansteuern?

602
Frank

Ich habe vor kurzem den Artikel Multi-Target-Electron-Debugging mit VSCode gelesen, dessen URL https://kwonoj.github.io/de/post/multi-target-dbg-electron-vscode/ lautet, und habe dazu geführt, dass es nahtlos in einer Oracle VM VirtuaBox funktioniert Manager, der das Betriebssystem RedHat Linux 7.1 mit Elektron 1.8.2, Knoten v8.9.4, vscode 1.17 und Firefox unter Verwendung des Inspector-Protokolls enthält. Hier ist mein launch.json, der Haltepunkte in main.js und main.cpp, einem C ++ - Addon, setzt, das berechnet, ob eine Ganzzahl eine Primzahl ist.

{ "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": "$", "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"] } ] } 

Wie könnte ich diesen Artikel auch in demselben Oracle VM VirtuaBox Manager, der das Betriebssystem RedHat Linux 7.1 enthält, erweitern, um das ältere Protokoll, electron 1.6.7, node v6.11.1, vscode 1.17 und firefox zu verwenden, und wie würde das überarbeitete launch.json aussehen mögen?

Ohne Erfolg versuchte ich eine Elektronenvorauslösungstask, deren Aufgaben.json unten gezeigt wird. Der Grund für die Vorversuchstaskaufgabe ist, dass runtimeExecutable für das Inspektorprotokoll und nicht für das Legacyprotokoll reserviert ist. Der Prelaunch-Task verursacht jedoch einen Laufzeitfehler EADDRESSINUSE: Port 5858.

{ "version": "1.6.7", "command": "electron", "isShellCommand": true, "args": [  "--remote-debugging-port=5858",  "$/main.js", ] } 

und erhielt die Fehlermeldung "Verbindung zum Laufzeitprozess kann nicht hergestellt werden: Grund: Socket wurde von einer anderen Partei beendet", als ich die folgende launch.json mit dem grünen vscode-Pfeil zum Ausführen einer zusammengesetzten Startkonfiguration verwendete.

"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": "$", "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"] } ]  } 

[Fenruary 24 2018] @Andre Weinand, ich zeige hier mein neuestes launch.json, das die Fehlermeldung "Verbindung zur Laufzeit kann nicht hergestellt wird; stellen Sie sicher, dass sich die Laufzeit im Debug-Modus" Legacy "befindet." anzeigen. Ich habe versucht, all Ihren früheren Empfehlungen zu folgen, stoße jedoch immer noch auf Probleme. Wenn ich auf den grünen vscode-Pfeil klicke, der der Server / Client-Compound-Startkonfiguration entspricht, wird "Electron Main" gestartet, die GDB-Haltepunkte jedoch nicht getroffen, die ich in main.cpp, einem C ++ - Addon, gesetzt habe. Ich verstehe, was Sie über das Einfügen von Debugger-Anweisungen in den C ++ - Addon-Quellcode sagen, aber ich würde es vorziehen, dies nicht zu tun. Wie kann ich meinen launch.json reparieren?

{ "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": "$", "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": [ "$/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. Februar 2018] @Andre Weinand, ich habe gelesen, dass Sie am 10. Mai 2017 im github.com-Artikel https://github.com/Microsoft/vscode/issues/26411 Folgendes geschrieben haben: "Sie können entweder" Vermächtnis "verwenden. oder "Inspector" -Protokoll für Knotenversion> 6.3 und <8.0, aber Sie müssen sicherstellen, dass Sie das entsprechende Argument "--debug" oder "--inspect" verwenden.

Übrigens, diese Redundanz in der Launch-Config wird in der Mai-Version behoben: Sie müssen keinen Port mehr angeben, nur das Protokoll wird das Richtige tun. "Da ich die Knotenversion 6.11.1 verwende, ist dies der Fall > 6.3 und <8.0, fragte ich mich, ob ich unseren launch.json anstelle des Protokolls "Legacy" auf das Protokoll "inspector" umstellen könnte, um ein "nahtloses" Debugging zu erreichen, wie ich es mit Knoten 8.9.4 tun konnte. Vielen Dank

0

1 Antwort auf die Frage

2
Andre Weinand

Das Attribut "Protokoll" bestimmt, ob das Protokoll "Inspector" oder "Legacy" verwendet wird. Bitte lesen Sie unser Dokument: https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_supported-nodelike-runtimes .

Sie können nicht zwei Debug-Sitzungen mit demselben Debug-Port parallel ausführen (dies ist in der letzten Debug-Konfiguration von oben der Fall). Und es fehlt ein "Programm" oder "RuntimeExecutable".

Ich schlage vor, den Wert des Attributs "protocol" in der Debug-Konfiguration mit der höchsten Fehlerrate in "Legacy" zu ändern (vorausgesetzt, das Protokoll ist das einzige Problem dieser Konfiguration).

Ich freue mich über Ihre ausführliche Antwort. Ich frage mich, ob ich den Legacy-Protokollwert der am meisten (gdb) Launch Debug Configuration zuweisen muss. Außerdem konnte ich denselben Debug-Port (dh 5858) parallel verwenden, wenn ich mit dem Inspector-Protokoll und nicht mit dem Legacy-Protokoll laufe. Darf ich fragen, welche Ports ich wählen sollte, um den EADDRESSINUSE-Fehler zu vermeiden? Vielen Dank. Frank vor 6 Jahren 0
In meiner Hast, die ursprüngliche Frage zu stellen, habe ich möglicherweise die Tatsache weggelassen, dass ich eine zusammengesetzte Startkonfiguration verwendet habe, bei der Electron Main und (gdb) Launch and Attach Program nacheinander statt parallel ausgeführt werden. Vielen Dank, dass Sie meinen Fehler mit der parallel stattfindenden preLaunch-Aufgabe erkannt haben. Frank vor 6 Jahren 0
Ich habe gerade Ihre nette Antwort akzeptiert. Muss der Firefox-Browser explizit aktiviert werden, um devtools.chrome.enabled mit about: config aktiviert zu werden, damit vscode das alte Protokoll der Version 8 von Chrome Debugging nutzen kann? Vielen Dank, Frank vor 6 Jahren 0
Ihre "cppdbg" -Konfiguration beinhaltet nicht das Debuggen von node.js. Die Verwendung des Attributs "protocol" macht also keinen Sinn (und wird nicht unterstützt, wie Sie herausfinden können: Sie werden eine fehlerhafte Fehlermeldung sehen). Die "cppdbg" -Konfiguration startet jedoch node.js und seit Sie ein "--inspect-brk = 5858" übergeben, haben Sie es für das Debuggen im "Inspektor" -Modus konfiguriert. Wenn Sie eine andere Debug-Sitzung mit diesem Knoten verwenden möchten, müssen Sie übereinstimmende Protokolle verwenden. Starten Sie für das "Legacy" -Protokoll nicht den ersten Knoten mit einem "--inspect ...", sondern verwenden Sie ein "--debug" -Argument. Andre Weinand vor 6 Jahren 0
Sie können jeden kostenlosen Debug-Port verwenden. Für Ihre erste "cppdbg" -Konfiguration schlage ich vor, dass Sie einen Port explizit angeben (was Sie bereits tun), da er mit einem Port in einer anderen Startkonfiguration übereinstimmen muss ("Attach Program" nehme ich an). In Ihrer letzten "Electron Main" -Startkonfiguration empfehle ich, keinen Port anzugeben. In diesem Fall wählt VS Code automatisch einen freien Port. Andre Weinand vor 6 Jahren 0
Bevor Sie eine zusammengesetzte Startkonfiguration versuchen, stellen Sie sicher, dass die einzelnen Startkonfigurationen funktionieren, indem Sie sie nacheinander manuell starten. Andre Weinand vor 6 Jahren 0
Ich kann zu FireFox nichts sagen, weil ich es nicht benutze. Andre Weinand vor 6 Jahren 0
@Andre Weinand, ich habe heute morgen herausgefunden, dass Sie fast zu 99% richtig sind. Ist Ihnen bewusst, dass Electron 1.6.8 beim Verbinden mit vscode Haltepunkte ignoriert? Was soll ich dagegen tun? Vielen Dank. Frank vor 6 Jahren 0
@Andre Weinand, ich entschuldige mich, dass ich runtimeExecutable falsch geschrieben habe. Was sollte ich tun, um den folgenden Fehler zu beheben: Fehler: Das Modul './build/Debug/addon.node' wurde mit NODE_MODULE_VERSION 48 gegen eine andere Node.js-Version kompiliert Die Version von Node.js erfordert NODE_MODULE_VERSION 53. Bitte versuchen Sie, das Modul unter process.module. (anonyme Funktion) [als dlopen] (ELECTRON_ASAR.js: 173: 20) bei Object.Module._extensions erneut zu kompilieren oder erneut zu installieren. Knoten (module.js: 598: 18) bei Object.module (anonyme Funktion) [als .node] (ELECTRON_ASAR.js: 173: 20) Vielen Dank. Frank vor 6 Jahren 0
@Andre Weinand, ich habe vergessen zu erwähnen, dass ich gerade node-gyp rebuild --debug ausgeführt habe, um den Fehler zu beheben: Fehler: Das Modul './build/Debug/addon.node' wurde mit einem anderen Node.js kompiliert Version mit NODE_MODULE_VERSION 48. Vielen Dank. Frank vor 6 Jahren 0
@Andre Weinand, ich habe bemerkt, dass mein package.json einen Eintrag für Elektron 1.6.8 und Elektronenneubau 1.7.3 enthält. Könnte dies die Ursache des Fehlers sein, Fehler: Das Modul './build/Debug/addon.node' wurde mit NODE_MODULE_VERSION 48 gegen eine andere Node.js-Version kompiliert. Diese Version von Node.js erfordert NODE_MODULE_VERSION 53, das ich gestern beobachtet habe ? Vielen Dank. Frank vor 6 Jahren 0
Wenn Electron 1.6.8 scheinbar Haltepunkte ignoriert, versuchen Sie normalerweise, den falschen Prozess zu debuggen. Versuchen Sie, eine "Debugger" -Anweisung anstelle eines Haltepunkts zu verwenden. Wenn Sie es immer noch nicht treffen, stimmt meine Hypothese. Andre Weinand vor 6 Jahren 0
Wenn Sie native Knotenmodule mit Elektron verwenden, müssen Sie sie mit dem Knoten aus der Electron-Version und nicht mit der Version eines externen Knotens erstellen, die die gleiche Version hat. Andre Weinand vor 6 Jahren 0
@Andre Weinand, ich habe am Ende meiner ursprünglichen SuperUser Stack Exchange-Frage einen neuen Abschnitt hinzugefügt. Darf ich Sie fragen, ob Sie es sich ansehen und mir sagen könnten, was ich in launch.json ändern muss, damit meine zusammengesetzte Startkonfiguration "Server / Client" nahtlos alle main.js- und main.cpp-Haltepunkte treffen kann, die ich nahtlos mit dem Erbe festgelegt habe? Protokoll? Vielen Dank. Frank vor 6 Jahren 0
@Andre Weinand, Wie baue ich mein C ++ - Addon addon.node neu auf, damit ich den Fehler "Fehler: Das Modul" ./build/Debug/addon.node "mit NODE_MODULE_VERSION gegen eine andere Node.js-Version kompilieren kann 48. Diese Version von Node.js erfordert NODE_MODULE_VERSION 53. " Mein package.json enthält einen Eintrag für Elektron 1.6.8 und einen Elektronenaustausch 1.7.3. Meine Knotenversion ist Knoten 6.11.1. Vielen Dank. Frank vor 6 Jahren 0
@Andre Weinand, ich habe gelesen, dass Sie am 10. Mai 2017 im github.com-Artikel https://github.com/Microsoft/vscode/issues/26411 geschrieben haben: "Sie können entweder das Protokoll" Legacy "oder" Inspector "verwenden für Knotenversion> 6.3 und <8.0, aber Sie müssen sicherstellen, dass Sie das entsprechende Argument "--debug" oder "--inspect" verwenden. Da ich Knotenversion 6.11.1 verwende, ist dies> 6.3 und <8.0 Ich fragte mich, ob ich unser launch.json anstelle des Protokolls "Legacy" auf das Protokoll "inspector" umstellen könnte, um ein "nahtloses" Debugging zu erreichen, wie ich es mit Knoten 8.9.4 tun konnte. Vielen Dank Frank vor 6 Jahren 0
Electron verfügt über einen integrierten node.js, der entweder Legacy oder Inspector unterstützt, jedoch nicht beide. Electron wechselte in Version 1.7.4 von Legacy zu Inspector (denke ich). Sie sollten also wissen, was Sie in Ihrem Fall verwenden können. Andre Weinand vor 6 Jahren 0
@Andre Weinand, ich verwende Electron 1.6.8 und Node 6.11.1 in meiner launch.json. Wenn ich vom Legacy-Protokoll zum Inspector-Protokoll wechsle, verwende ich den RuntimeArg von [--inspect = 5858], aber die Debug-Konsole zeigt --inspect = 19763 und Error Connection lehnte an Port 19763 ab. Wie konnte ich diesen Fehler beheben, den ich gestern beobachtet habe ? Vielen Dank. Frank vor 6 Jahren 0
Hast du meinen vorherigen Beitrag gelesen und verstanden? Wenn Sie Electron 1.6.8 (älter als 1.7.4) verwenden, wird nur das Protokoll "Legacy" unterstützt. Daher ist es nicht sinnvoll, das Protokoll "Inspector" zu verwenden. Andre Weinand vor 6 Jahren 0
@Andre Weinand, JavaScript hat eine Debugger-Anweisung, während C ++ keine Debugger-Anweisung hat. Sollte ich zu dem Schluss kommen, dass wir warten müssen, bis Elektron 1.8.2 und Knoten 8.9.4 für unser Open Source Software-Repository git freigegeben werden, das sich hinter einem HTTP-Proxy befindet, um Benutzern ein nahtloses Debugging-Erlebnis mit dem Inspector-Protokoll zu bieten? Vielen Dank. Frank vor 6 Jahren 0
Ich verstehe deine Frage nicht. Welcher Zusammenhang besteht zwischen der Debugger-Anweisung und der Elektronen- und Knotenversion? Andre Weinand vor 6 Jahren 0
@Andre Weinand, ich erinnere mich daran, dass Sie am 21. Februar gesagt haben: "Wenn Electron 1.6.8 Haltepunkte zu ignorieren scheint, versuchen Sie normalerweise, den falschen Prozess zu debuggen. Versuchen Sie, eine" Debugger "-Anweisung anstelle eines Haltepunkts zu verwenden." Aber nach ausgiebiger Google-Suche entdeckte ich, dass es keine C ++ - "Debugger" -Anweisungen gibt, die strategisch platzierte gdb-Haltepunkte nachahmen. Daher kam ich zu dem Schluss, dass Electron 1.6.8 keine Abhilfemaßnahme hat, die Haltepunkte bei Verwendung des "Legacy" -Protokolls zu ignorieren scheint. Kann ich nvm Electron 1.7.4 zusammen mit Knoten 6.11.1 installieren und beide als Inspektor ausführen? Frank vor 6 Jahren 0
Ich nahm an, dass Sie die JavaScript-Teile einer Electron-Anwendung debuggen möchten, da fast niemand die C ++ - Teile von Electron debuggen würde. Aus diesem Grund erwähnte ich die Verwendung der "Debugger" -Anweisung. Wenn Sie C ++ debuggen müssen, kann ich Ihnen nicht helfen (und es gibt keine Debugger-Anweisung). Das Protokollproblem "Legacy" vs. "Inspector" gilt nur für node.js. Es hat nichts mit C ++ zu tun. Wenn Sie Probleme mit C ++ - Haltepunkten haben, kann ich Ihnen nicht helfen (da ich nur den VS-Code-Knotendebugger geschrieben habe). Andre Weinand vor 6 Jahren 0
Wenn Sie Electron verwenden, können Sie keine Version von node.js wählen, da Electron nur den darin enthaltenen Knoten js verwendet. Indem Sie eine bestimmte Electron-Version auswählen, wählen Sie auch eine node.js-Version aus. Dies bestimmt, ob das Knoten-Debuggen das Protokoll "Legacy" oder "Inspector" verwenden muss. Dies ist jedoch völlig unabhängig von C ++ - Debugging. Der C ++ - Debugger von VS Code ist eine separate Erweiterung, die nur erforderlich ist, wenn Sie native Knotenmodule (z. B.) entwickeln. Andre Weinand vor 6 Jahren 0
@Andre Weinand, Wir möchten nicht die C ++ - Teile oder das Intern von Electron debuggen. Stattdessen möchten wir ein C ++ - Zusatzmodul debuggen, das berechnet, ob eine Ganzzahl eine Primzahl ist. Gibt es einen Ausweg für uns, das zu tun? Vielen Dank. Frank vor 6 Jahren 0
Wie ist dieses Zusatzmodul in Electron integriert? Über ein Knotenmodul? Andre Weinand vor 6 Jahren 0
@Andre Weinand, ich glaube, dass unser C ++ - Zusatzmodul über ein Knotenmodul in Electron integriert ist. Die gesamten Details unseres Open-Source-Proof-on-Konzepts werden in diesem Artikel beschrieben: https: //medium.com/@marcinbaraniecki/extending-node-js-with-native-c-modules-63294a91ce4. Könnte ich Sie bitten, es zu übersehen? Danke für all deine Hilfe. Frank vor 6 Jahren 0
Ich schlage vor, Sie konzentrieren sich nur auf das C ++ - Debugging Ihres nativen Codes. In Ihrem Fall müssen Sie kein JavaScript debuggen. Daher ist das Protokoll "Legacy" vs. "Inspector" überflüssig. Andre Weinand vor 6 Jahren 0
@Andre Weinand, ich folgte Ihrem Vorschlag, mich auf das C ++ - Debugging unseres nativen Codes mit gdb mit vscode zu konzentrieren, und es funktionierte. Nun möchte ich jedoch Knotenanwendungen (dh main.js) in vscode vor und / oder nach dem gdb-Thread-Debugging durchführen. Wenn dies möglich ist, wie können wir das mit Elektron 1.6.8 und Knoten 6.11.1 tun? Vielen Dank für Ihre Hilfe. Frank vor 6 Jahren 0
@Andre Weinand, Ich habe die Fehlermeldung "Verbindung zum Laufzeitprozess kann nicht hergestellt werden. Socket endete von einer anderen Partei", als ich von Elektron 1.6.8 zu Elektron 1.6.7 wechselte. Als ich dann die Fixiereinheit 5858 / tcp verwendete, stellte sich heraus, dass ein vscode-Prozess an Port 5858 abhörte, ein electon 1.6.7-Prozess an Port 5858 abhörte und eine TCP-Verbindung vom vscode-Prozess zu elektron 1.6.7 hergestellt wurde als ich das "Electron Main" -Stück meiner Compond Launch-Konfiguration lief. Gibt es eine Möglichkeit, diesen Fehler zu beheben, sodass ich nahtlos von "Electron Main" zu gdb wechseln kann? Vielen Dank. Frank vor 6 Jahren 0
Sie können nicht zwei oder mehr Prozesse am selben Port überwachen! Verwenden Sie in diesem Fall nicht das Standardkennzeichen "--debug", da Port 5858 abgehört wird. Verwenden Sie stattdessen etwas wie "--debug = 6666". Stellen Sie jedoch sicher, dass Sie denselben Port in Ihrer Startkonfiguration verwenden. Geben Sie also "Port" an: 6666 ". Beginnen Sie außerdem erst, die zusammengesetzten Starts zu testen, wenn die einzelnen Teile funktionieren. Andre Weinand vor 6 Jahren 0