Remote-Debugging von Applikationen mit Visual Studio Code (VSC)

Dieser Abschnitt beschreibt, wie Sie Ihre auf Windows basierende Entwicklungsumgebung nutzen können, um Applikationen auf TwinCAT/BSD-Zielsystemen zu kompilieren und zu debuggen.

Die Grundidee ist, dass Sie Ihren gesamten Quellcode auf dem Windows-Entwicklungsrechner aufbewahren. Die Bearbeitung des Quellcodes erfolgt unter Windows und auch das Debugging-Frontend läuft auf Ihrem normalen Windows-Entwicklungsrechner. Zum Kompilieren und Debuggen auf TwinCAT/BSD wird eine SSH-Verbindung verwendet. Dieser Prozess kann in folgende Schritte aufgeteilt werden:

  1. Synchronisieren Sie den Quellcode über SSH mit Hilfe von rsync vom Windows-Entwicklungsrechner zum TwinCAT/BSD-Zielsystem.
  2. Kompilieren Sie die Applikation über eine SSH-Verbindung auf dem Zielsystem.
  3. Debuggen Sie mit Hilfe von VSC über eine SSH-Verbindung zu gdb, das auf dem Zielsystem läuft.

Voraussetzungen:

(Get-Content -Encoding UTF8 $home\.ssh\id_ed25519.pub).Replace("`r`n", "`n") | ssh Administrator@172.17.66.111 'cat >> ~/.ssh/authorized_keys'
(CTRL+p) ext install ms-vscode.cpptools

VSC-Einstellungen:

Jetzt sind cwrsync und ssh verfügbar, und Sie können VSC weiter für das Remote-Debugging einrichten.

1. Beginnen Sie mit der Synchronisierung des Quellcodes. Vergewissern Sie sich, dass Sie einen Ordner .vscode in Ihrem Projektverzeichnis haben. Wählen Sie dann aus dem VSC-Menü:
Terminal->Configure Tasks...->Create tasks.json from template->Others
2. Passen Sie die folgende Vorlage entsprechend Ihrer Konfiguration an, um eine Task wie syn-src-to-remote zu erhalten.
{
  "version": "2.0.0",
  "windows": {
    "options": {
      "shell": {
        "executable": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
        "args": [
          "-NoProfile",
          "-ExecutionPolicy",
          "Bypass",
          "-Command"
        ]
      }
    }
  },
  "tasks": [
    {
      "label": "sync-src-to-remote",
      "type": "shell",
      "args": [
        "-aP",
        "--exclude",
        ".git",
        "--exclude",
        "This folder should be ignored",
        "-e", "c:/''Program Files''/cwrsync/bin/ssh.exe -i ${userHome}/.ssh/id_ed25519 -o ''StrictHostKeyChecking no''",
        ".",
        "Administrator@172.17.66.111:~/${workspaceFolderBasename}/"
      ],
      "command": "c:/Program Files/cwrsync/bin/rsync.exe",
      "problemMatcher": []
    }
  ]
}
3. Sie können die neue Task wie folgt testen:
Menu->Terminal->Run Task->sync-src-to-remote
4. Jetzt sollten Sie etwas im Terminal-Ausgabefenster sehen und die Quelldateien sollten auf Ihrem Zielsystem erscheinen. Wenn Sie "Permission denied"-Fehler sehen, versuchen Sie diese zusätzlichen rsync-Argumente:
"--chmod=u=rwX --chmod=go=rX"
5. Wenn Sie einen anderen SSH-Port verwenden, fügen Sie ihn mit -p <Port> hinzu:
"c:/''Program Files''/cwrsync/bin/ssh.exe -p 22222 -i ${userHome}/.ssh/id_ed25519 -o ''StrictHostKeyChecking no''"
6. Der nächste Schritt besteht darin, Ihre Applikation remote auf Ihrem Zielsystem zu erstellen. Fügen Sie eine weitere Task build-on-remote zu Ihrer tasks.json hinzu.
{
  "version": "2.0.0",
  "windows": {
    "options": {
      "shell": {
        "executable": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
        "args": [
          "-NoProfile",
          "-ExecutionPolicy",
          "Bypass",
          "-Command"
        ]
      }
    }
  },
  "tasks": [
    {
      "label": "sync-src-to-remote",
      "type": "shell",
      "args": [
        "-aP",
        "--exclude",
        ".git",
        "--exclude",
        "This folder should be ignored",
        "-e", "c:/''Program Files''/cwrsync/bin/ssh.exe -i ${userHome}/.ssh/id_ed25519 -o ''StrictHostKeyChecking no''",
        ".",
        "Administrator@172.17.66.111:~/${workspaceFolderBasename}/"
      ],
      "command": "c:/Program Files/cwrsync/bin/rsync.exe",
      "problemMatcher": []
    },
    {
      "dependsOn":"sync-src-to-remote" ,
      "label": "build-on-remote",
      "group" : "build",
      "type" : "shell",
      "args": [
         "Administrator@172.17.66.111",
         "cd ${workspaceFolderBasename}; clang++ -g -Wall -pedantic main.cpp -o main. bin"
      ],
      "command": "ssh",
      "problemMatcher": []
    }
    ]
}
7. Dieses Mal können Sie STRG+SHIFT+B verwenden, um die neue build-on-remote Task auszuführen, da wir sie der Gruppe build hinzugefügt haben.
8. Fügen Sie eine Startkonfiguration hinzu, um Ihre Applikation remote zu debuggen. Wählen Sie im Menü:
Run->Add configuration
9. Bearbeiten Sie die launch.json Vorlage so, dass sie Ihren eigenen Anforderungen entspricht:
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "debug-on-remote",
      "type": "cppdbg",
      "request": "launch",
      "cwd": "/home/Administrator/${workspaceFolderBasename}",
      "preLaunchTask": "build-on-remote",
      "program": "main",
      "stopAtEntry": false,
      "externalConsole": false,
      "sourceFileMap": {
        "/home/Administrator/${workspaceFolderBasename}": "${workspaceFolder}"
      },
      "pipeTransport": {
        "debuggerPath": "/usr/bin/gdb",
        "pipeProgram": "ssh",
        "pipeArgs": [
          "Administrator@172.17.66.111"
        ]
      },
      "MIMode": "gdb",
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ]
    }
  ]
}
10. Passen Sie ein paar Parameter an Ihre Anforderungen an:
program: should be the binary on your remote machine you want to debug
pipeTransport->pipeArgs :username and ip address for your remote machine

Jetzt haben Sie eine launch.json Datei. Mit F5 wird ein Debugger ausgeführt, der mit Ihrem Programm auf dem Zielrechner verbunden ist.
Hinweis : Stellen Sie sicher, dass Sie mit aktivierten Debugsymbolen kompilieren ("-g").