One of our IOT projects here at Hippotec required firing up the old C development environment. But something happened since I've last booted Visual Studio Code and suddenly breakpoints are completely ignored.

The issue

My code seems to compile and run just fine (thanks to this SO thread) but I don't get any breakpoints, not even on start using "stopAtEntry": true or by attaching to a running process.

My tasks.json and launch.json are very standard:

{
   "tasks":[
      {
         "type":"shell",
         "label":"clang build active file",
         "command":"/usr/bin/clang",
         "args":[
            "-g",
            "${file}",
            "-o",
            "${fileDirname}/${fileBasenameNoExtension}",
            "-I/usr/local/opt/openssl/include",
            "-L/usr/local/opt/openssl/lib",
            "-lssl",
            "-lcrypto"
         ],
         "options":{
            "cwd":"/usr/bin"
         }
      }
   ],
   "version":"2.0.0"
}

And:

{
   "version":"0.2.0",
   "configurations":[
      {
         "name":"(lldb) Attach",
         "type":"cppdbg",
         "request":"attach",
         "program":"${workspaceFolder}/test2",
         "processId":"${command:pickProcess}",
         "MIMode":"lldb"
      },
      {
         "name":"clang build and debug active file",
         "type":"cppdbg",
         "request":"launch",
         "program":"${fileDirname}/${fileBasenameNoExtension}",
         "args":[

         ],
         "stopAtEntry":true,
         "cwd":"${workspaceFolder}",
         "environment":[

         ],
         "externalConsole":false,
         "MIMode":"lldb",
         "preLaunchTask":"clang build active file",
         "logging":{
            "trace":false,
            "traceResponse":false,
            "engineLogging":false
         }
      }
   ]
}

At first I suspected my code but I couldn't get debug working on a very simple C example as well.

I'm aware of https://stackoverflow.com/questions/48268226/vs-code-is-ignoring-the-breakpoint-in-c-debugging and all of the similar discussions on SO, but clearly this isn't the case here.

The setup

MacOS Catalina (10.15, production) alongside XCode 11.1, Visual Studio Code 1.39.0 and C/C++ extension 0.26.0-insiders3.
Like a boss.

The prestige

No upgrade goes unpunished and upgrading my Mac to Catalina 10.15 was no exception.

Apparently it's a known issue with Catalina and XCode 11.x support: https://github.com/microsoft/vscode-cpptools/issues/3829 caused by lldb-mi.

lldb-mi is the driver that sits between the IDE and the lldb itself.

It appears that the version of lldb-mi that comes bundled with the plugin isn't compatible with Catalina, and XCode 11.x doesn't have lldb-mi anymore.

TL;DR the (temp) solutions

A replacement lldb-mi
The first solution is to use the lldb-mi that comes bundled with previous versions of XCode, by setting the miDebuggerPath property of launch.json.

I happen to have XCode 10.1 laying around so my configuration is:

"miDebuggerPath":"/Applications/Xcode 10.1.app/Contents/Developer/usr/bin/lldb-mi",

I managed to get basic debugging working but there are compatibility issues to be expected. However this turned out to be good enough for my needs (yay!).

A replacement lldb VSCode frontend
The second solution is to use the VSCode-lldb extension.

To be continued

I will keep this post updated with a permanent solution when it comes up.