Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Adapter debuggen mit VSCode

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Adapter debuggen mit VSCode

    This topic has been deleted. Only users with topic management privileges can see it.
    • AlCalzone
      AlCalzone Developer last edited by

      > Debugger listening on ws://127.0.0.1:9229
      probier mal zusätzlich die Option

      --inspect=0.0.0.0:9229
      

      um node klarzumachen, dass es nicht nur auf der lokalen Loopback-IP lauschen soll.

      1 Reply Last reply Reply Quote 0
      • Meistertr
        Meistertr Developer last edited by

        super hat geklappt, die breakpoints klappen nicht, ist das normal oder kann ich das auch noch irgendwo einstellen?

        1 Reply Last reply Reply Quote 0
        • AlCalzone
          AlCalzone Developer last edited by

          Ich habe definitiv auch schon mit Breakpoints debuggt. Woran das liegt, weiß ich aber jetzt nicht aus dem Kopf.

          Bei TypeScript ist manchmal das Problem, dass das Source-Mapping nicht funktioniert und die BPs daher im generierten JS-File erstellt werden müssen. Bei reinem JS sollte das aber kein Problem sein.

          1 Reply Last reply Reply Quote 0
          • M
            Marty56 last edited by

            Könnte man dieses Verfahren auch auf normale Script Entwicklung anwenden?

            Vielleicht ging es mit einer zweiten Javascript Instanz, die man dann mit debug option neustartet.

            Hat das schon jemand ausprobiert.

            1 Reply Last reply Reply Quote 0
            • greyhound
              greyhound last edited by

              Ich habe es auch geschafft, meinen Adapter auf TS umzustellen (husq-automower) und wollte nun einiges debuggen. Leider springt der Code nach der Initialisierung im in

                  onUnload(callback) {
                      try {
                          this.log.info('cleaned everything up...');
                          callback();
                      }
                      catch (e) {
                          callback();
                      }
                  }
              

              Habe das auch mit main.ts aus dem TypeScript-Adapter-Template versucht.
              Starte ich den Adpater direkt über iobroker-Admin wird augenscheinlich (laut Log) "onReady()" ausgeführt.

              Außerdem ist im onUnload this.log == undefined.

              Muss ich beim Debuggen "tricksen", sprich einige Code-Zweige "verbiegen" oder muss ich noch etwas konfigurieren?

              AlCalzone 1 Reply Last reply Reply Quote 0
              • AlCalzone
                AlCalzone Developer @greyhound last edited by AlCalzone

                @greyhound Ich debugge regelmäßig mit TypeScript und habe damit (fast) keine Probleme. Dass beim Debuggen plötzlich ein anderer Code-Zweig ausgeführt werden soll, kann eigentlich nicht sein. Hast du Source-Maps aktiviert?

                Am besten teilst du mal deine .vscode/launch.json und tsconfig.json.

                Außerdem ist im onUnload this.log == undefined.

                Poste mal deinen Code, der im Konstruktor steht.

                greyhound 1 Reply Last reply Reply Quote 0
                • greyhound
                  greyhound @AlCalzone last edited by

                  @AlCalzone said in Adapter debuggen mit VSCode:

                  @greyhound Ich debugge regelmäßig mit TypeScript und habe damit (fast) keine Probleme. Dass beim Debuggen plötzlich ein anderer Code-Zweig ausgeführt werden soll, kann eigentlich nicht sein. Hast du Source-Maps aktiviert?

                  Am besten teilst du mal deine .vscode/launch.json und tsconfig.json.

                  Außerdem ist im onUnload this.log == undefined.

                  Poste mal deinen Code, der im Konstruktor steht.

                  launch.json

                  {
                  	// Verwendet IntelliSense zum Ermitteln möglicher Attribute.
                  	// Zeigen Sie auf vorhandene Attribute, um die zugehörigen Beschreibungen anzuzeigen.
                  	// Weitere Informationen finden Sie unter https://go.microsoft.com/fwlink/?linkid=830387
                  	"version": "0.2.0",
                  	"configurations": [
                  		{
                  			"type": "node",
                  			"request": "launch",
                  			"name": "Launch Program",
                  			"program": "${workspaceFolder}\\build\\main.js",
                  			"outFiles": ["${workspaceFolder}/**/*.js"]
                  		},
                  		{
                  			"type": "node",
                  			"request": "attach",
                  			"name": "An den Prozess anfügen", // Name, der im VSCode Auswahlmenü neben dem grünen Play angezeigt wird
                  			"address": "127.0.0.1", // Adresse, an dem der node.js Prozess läuft (bei Remote Debug, der Remote-Rechner)
                  			"port": 5858 // Port, auf dem der node.js Debugger lauscht, der mit node --debug-brk ... gestartet wird
                  		}
                  	]
                  }
                  

                  tsconfig.json

                  {
                  	"compileOnSave": true,
                  	"compilerOptions": {
                  		// do not compile anything, this file is just to configure type checking
                  		// the compilation is configured in tsconfig.build.json
                  		"noEmit": true,
                  
                  		// check JS files, but do not compile them => tsconfig.build.json
                  		"allowJs": true,
                  		"checkJs": true,
                  
                  		"noEmitOnError": true,
                  		"outDir": "./build/",
                  		"removeComments": false,
                  		"module": "commonjs",
                  		"moduleResolution": "node",
                  		// this is necessary for the automatic typing of the adapter config
                  		"resolveJsonModule": true,
                  
                  		// Set this to false if you want to disable the very strict rules (not recommended)
                  		"strict": true,
                  		// Or enable some of those features for more fine-grained control
                  		// "strictNullChecks": true,
                  		// "strictPropertyInitialization": true,
                  		// "strictBindCallApply": true,
                  		// "noImplicitAny": true,
                  		// "noUnusedLocals": true,
                  		// "noUnusedParameters": true,
                  
                  		// Consider targetting es2017 or higher if you require the new NodeJS 8+ features
                  		"target": "es2015",
                  
                  		"sourceMap": false,
                  		"inlineSourceMap": false,
                  		"watch": false
                  	},
                  	"include": ["**/*.ts"],
                  	"exclude": ["build/**", "node_modules/**", "admin/**"]
                  }
                  

                  Konstruktor, ist die direkt vom Template abgeleitete Variante ohne eigenem Code

                  class HusqAutomower extends utils.Adapter {
                  	public constructor(options: Partial<ioBroker.AdapterOptions> = {}) {
                  		super({
                  			...options,
                  			name: 'husq-automower',
                  		});
                  		this.on('ready', this.onReady.bind(this));
                  		this.on('objectChange', this.onObjectChange.bind(this));
                  		this.on('stateChange', this.onStateChange.bind(this));
                  		// this.on("message", this.onMessage.bind(this));
                  		this.on('unload', this.onUnload.bind(this));
                  	}
                  
                  	/**
                  	 * Is called when databases are connected and adapter received configuration.
                  	 */
                  	private async onReady(): Promise<void> {
                  		// Initialize your adapter here
                  
                  		// The adapters config (in the instance object everything under the attribute "native") is accessible via
                  		// this.config:
                  		this.log.info('config option1: ' + this.config.option1);
                  		this.log.info('config option2: ' + this.config.option2);
                  
                  
                  
                  1 Reply Last reply Reply Quote 0
                  • AlCalzone
                    AlCalzone Developer last edited by

                    Bin gerade nicht daheim.

                    Aber probiere mal in der Attach-Konfiguration und in tsconfig.json sourceMaps: true zu setzen. Dann einmal kompilieren und die Adapter-Dateien aktualisieren. Anschließend müsste es gehen, wenn ich alles richtig im Kopf habe.

                    1 Reply Last reply Reply Quote 0
                    • greyhound
                      greyhound last edited by

                      Der Tipp mit sourceMaps hat etwas weitergeholfen, aber der Debugger hielt danach auch beim unLoad nicht mehr an.
                      Habe dann ja auf einem recht frischen Windows Pro x64 1809 mit dem neuen Windows-Installer mir eine neue ioBroker-Instanz installiert. Das lief recht unkompliziert, dann ging es an VSC ...

                      Entsprechend des Installationsansatzes sollte die Commandbox nur via dem Startmenü >> ioBroker <Instanzname> Kommandozeile geöffnet werden.

                      Als erstes meckerte VSC über fehlendes gulp und eslint ...

                      > cd node_modules\iobroker.husq-automower
                      
                      > npm install gulp
                      
                      > npm install eslint
                      

                      Dann als nächstes kamen beim Debuggen folgende Exceptions

                      Error: Cannot find module 'supports-color'
                          at Function.Module._resolveFilename (module.js:548:15)
                          at Function.Module._load (module.js:475:25)
                          at Module.require (module.js:597:17)
                          at require (internal/module.js:11:18)
                          at Object.<anonymous> (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\debug\src\node.js:29:23)
                          at Module._compile (module.js:653:30)
                      	
                      Error: Cannot find module 'bufferutil'
                          at Function.Module._resolveFilename (module.js:548:15)
                          at Function.Module._load (module.js:475:25)
                          at Module.require (module.js:597:17)
                          at require (internal/module.js:11:18)
                          at Object.<anonymous> (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\ws\lib\BufferUtil.js:35:22)
                      	
                      Error: Cannot find module 'utf-8-validate'
                          at Function.Module._resolveFilename (module.js:548:15)
                          at Function.Module._load (module.js:475:25)
                          at Module.require (module.js:597:17)
                          at require (internal/module.js:11:18)
                          at Object.<anonymous> (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\ws\lib\Validation.js:10:23)
                      

                      okay, installiere ich nach

                      cd node_modules\iobroker.js-controller
                      
                      npm install supports-color
                      npm install bufferutil
                      npm install utf-8-validate
                      

                      Nun kamen folgende Exceptions

                      Error: ENOENT: no such file or directory, scandir 'C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\bufferutil\build\Release'
                          at Object.fs.readdirSync (fs.js:904:18)
                          at getFirst (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\node-gyp-build\index.js:47:20)
                          at Function.load.path (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\node-gyp-build\index.js:27:17)
                          at load (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\node-gyp-build\index.js:16:30)
                          at Object.<anonymous> (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\bufferutil\index.js:4:45)
                          at Module._compile (module.js:653:30)
                          at Object.Module._extensions..js (module.js:664:10)
                          at Module.load (module.js:566:32)
                          at tryModuleLoad (module.js:506:12)
                          at Function.Module._load (module.js:498:3)
                      	
                      
                      Error: ENOENT: no such file or directory, scandir 'C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\bufferutil\build\Debug'
                          at Object.fs.readdirSync (fs.js:904:18)
                          at getFirst (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\node-gyp-build\index.js:47:20)
                          at Function.load.path (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\node-gyp-build\index.js:30:15)
                          at load (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\node-gyp-build\index.js:16:30)
                          at Object.<anonymous> (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\bufferutil\index.js:4:45)
                          at Module._compile (module.js:653:30)
                          at Object.Module._extensions..js (module.js:664:10)
                          at Module.load (module.js:566:32)
                          at tryModuleLoad (module.js:506:12)
                          at Function.Module._load (module.js:498:3)
                      	
                      Error: ENOENT: no such file or directory, scandir 'C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\utf-8-validate\build\Release'
                          at Object.fs.readdirSync (fs.js:904:18)
                          at getFirst (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\node-gyp-build\index.js:47:20)
                          at Function.load.path (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\node-gyp-build\index.js:27:17)
                          at load (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\node-gyp-build\index.js:16:30)
                          at Object.<anonymous> (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\utf-8-validate\index.js:4:45)
                          at Module._compile (module.js:653:30)
                          at Object.Module._extensions..js (module.js:664:10)
                          at Module.load (module.js:566:32)
                          at tryModuleLoad (module.js:506:12)
                          at Function.Module._load (module.js:498:3)
                      	
                      Error: ENOENT: no such file or directory, scandir 'C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\utf-8-validate\build\Debug'
                          at Object.fs.readdirSync (fs.js:904:18)
                          at getFirst (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\node-gyp-build\index.js:47:20)
                          at Function.load.path (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\node-gyp-build\index.js:30:15)
                          at load (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\node-gyp-build\index.js:16:30)
                          at Object.<anonymous> (C:\Program Files\iobroker\ioBroker01\node_modules\iobroker.js-controller\node_modules\utf-8-validate\index.js:4:45)
                          at Module._compile (module.js:653:30)
                          at Object.Module._extensions..js (module.js:664:10)
                          at Module.load (module.js:566:32)
                          at tryModuleLoad (module.js:506:12)
                          at Function.Module._load (module.js:498:3)
                      

                      okay, dann bauen wir die Module ...

                      cd node_modules\iobroker.js-controller\node_modules\bufferutil
                      node-gyp configure
                      node-gyp build
                      
                      cd node_modules\iobroker.js-controller\node_modules\utf-8-validate
                      node-gyp configure
                      node-gyp build
                      

                      So, nun lief das mit dem Debuggen schon ziemlich gut, aber dann
                      41ca5ae5-395c-444e-84d6-bd0e0d7341ed-image.png

                      Aah, VSC möchte lieber elevated gestartet werden.
                      Im Adapterverzeichnis ein kleines Skript startVSC.bat mit folgendem Inhalt abgelegt:

                      "C:\Users\<Dein Anmeldename>\AppData\Local\Programs\Microsoft VS Code\Code.exe"
                      

                      und via Explore als Administrator gestartet.

                      Terminal öffnen (<Ctrl>+<ö>) und Adapter starten

                      node --inspect-brk node_modules/iobroker.husq-automower/build/main.js --force --logs <Enter>
                      

                      dann das Debug gestartet und ...
                      425d6601-35ea-4bad-9622-a2e9cee4331e-image.png

                      endlich da, wo ich stehen wollte!

                      Danke für die Unterstützung.

                      AlCalzone 1 Reply Last reply Reply Quote 0
                      • AlCalzone
                        AlCalzone Developer @greyhound last edited by

                        @greyhound die ganzen fehlenden module klingen mir danach als wäre die package.json unvollständig. Wenn alle dependencies vollständig sind und der adapter in iobroker installiert wurde dürften keine module fehlen. Schon gar nicht eslint, welches eigentlich nur zur Entwicklungszeit im Editor benötigt wird.

                        greyhound 1 Reply Last reply Reply Quote 0
                        • greyhound
                          greyhound @AlCalzone last edited by

                          @AlCalzone Das selbe Problem hatte ich auch bei meiner alten Installation und du meinst sicherlich die package.json vom js-controller, denn dort sind ja die Fehler aufgetreten oder?

                          AlCalzone 1 Reply Last reply Reply Quote 0
                          • AlCalzone
                            AlCalzone Developer @greyhound last edited by

                            @greyhound Nein, eigentlich die vom Adapter. Aber vielleicht ist es ja auch ganz was anderes - per npm link gelinkte Pakete o.ä.?

                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post

                            Support us

                            ioBroker
                            Community Adapters
                            Donate
                            FAQ Cloud / IOT
                            HowTo: Node.js-Update
                            HowTo: Backup/Restore
                            Downloads
                            BLOG

                            907
                            Online

                            31.9k
                            Users

                            80.1k
                            Topics

                            1.3m
                            Posts

                            8
                            29
                            16259
                            Loading More Posts
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes
                            Reply
                            • Reply as topic
                            Log in to reply
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                            The ioBroker Community 2014-2023
                            logo