Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remote debugging C++ with VsCode

I have gdbserver attached to a process and working fine on a remote machine, port 9999. On my local machine, from command line:

$ gdb
(gdb) target remote localhost:9999

works just fine. I am trying to configure Vs Code debugger so that I can have a GDB frontend for this case. Here is my launch JSON.

"version": "0.2.0",
"configurations": [
    {
        "name": "GDB",
        "type": "cppdbg",
        "request": "attach",
        "miDebuggerServerAddress": "localhost:9999",
        "program": "path-to-cross-compiled-binary-with-same-debug-symbols",
        "linux": {
            "MIMode": "gdb",
        },
    }
]

There are couple of issues here. First of all, why "program"? In this case, gdb doesn't need any program name to start. Program is already running on remote, gdbserver is already attached to it. I just want gdb client to connect to port 9999. But anyways, moving on.

It wants me to give a processId. This also does not make sense, I am already attached on remote. The fun part is:

  1. If you leave out processId, Vs Code says "unable to parse the process id"
  2. If you specify a processId, Vs Code says "processId cannot be used with miDebuggerServerAddress"

Of course, if I am using a debugger server address, server is already attached to PID and it makes sense that processId can't be used in this case. But if I leave it out, VS Code gives the 1. error. This is cyclic in a way.

Anyone is able to attach to a remote process in VS Code C++ debugger with gdbserver address, that is my question. What is wrong with my launch file?

like image 828
meguli Avatar asked Oct 04 '19 11:10

meguli


1 Answers

You need to use the "launch" request instead of "attach". I also needed to add the default "cwd" option.

"request": "launch",
"cwd": "${workspaceFolder}",

You may also need to define "additionalSOLibSearchPath".

My launch config now looks like this:

{
// 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": [
    {
        // "processId": "${command:pickProcess}",
        "name": "(gdb) Remote Attach",
        "type": "cppdbg",
        "request": "launch",
        "program": ".\\src\\binaryfolder\\app.nostrip",
        "additionalSOLibSearchPath": "arm-none-linux-gnueabi/libc/lib;./lib;C:\\DeviceSDK\\win-2.8.15\\sdk\\toolchains\\arm-4.4.1\\arm-none-linux-gnueabi\\libc\\lib;C:\\DeviceSDK\\win-2.8.15\\sdk\\platforms\\201205\\lib",
        // "processId": "${command:pickProcess}",
        "MIMode": "gdb",
        "cwd": "${workspaceFolder}",
        "miDebuggerPath": "C:\\DeviceSDK\\win-2.8.15\\sdk\\toolchains\\arm-4.4.1\\bin\\arm-none-linux-gnueabi-gdb.exe",
        "miDebuggerServerAddress": "192.168.205.88:51000",
        "miDebuggerArgs": " -ex 'handle all print nostop noignore'",
        "setupCommands": [
            {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true,
            }
        ]
    },
]

}

See CppTools issue 321

like image 58
pdcoxhead Avatar answered Oct 07 '22 07:10

pdcoxhead