microsoft / MIEngine

The Visual Studio MI Debug Engine ("MIEngine") provides an open-source Visual Studio Debugger extension that works with MI-enabled debuggers such as gdb and lldb.
MIT License
818 stars 218 forks source link

Connection refused: OpenDebugAD7 --server --pauseForDebugger [WSL2] how to debug? #1478

Open borjamunozf opened 1 month ago

borjamunozf commented 1 month ago

Hello.

I'm trying to debug the OpenDebugAD7.exe following the documentation available to gather more information about this extremely annoying performance issue reported in c++ tools extension

However, the attach it's failing when running this with Dotnet extension. I also tried running a GDB with target remote to see if it's able to connect.

Config:

{
    "configurations": [
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "debugServer": 4711
         }
    ]
}

Tested with different ports with same result.

Environment:

How I built:

dotnet build src/MIDebugEngine-Unix.sln

./PublishOpenDebugAD7.sh whatever

The thing case is that if I run without --pauseForDebugger, it seems that the port it's accesible and even got connection with GDB.

./OpenDebugAD7.exe --server 

imagen

Shouldn't start listening at least and wating for debugger in the port? Or I have misunderstood it?

Related, if I try to attach using the coreclr + OpenDebugAD7 --server --pauseForDebugger, it crashes:

Stopping due to fatal error: FileNotFoundException: Could not find file '/home/borjamf/MIEngine/bin/Debug/vscode/coreclr.ad7Engine.json'.

Could you guide me how to be able to debug this? Thanks.

borjamunozf commented 1 month ago

Ok, I was able to connect to the running PID of OpenDebugAD7. However, I think the pauseForDebugger option is not really clear...

Steps:

  1. Build extension c++ microsoft passing --server option to OpenDebugAD7
  2. Install it & reload.
  3. Create a file named coreclr.ad7Engine.json inside ~/.vscode-server/extensions/..cpp-tools-your-version/
  4. Start debugging C++ target
  5. In other VScode Window, launch this config WITHOUT debugServer. For some reason, setting debugServer complains about missing program field.
  6. {
    "configurations": [
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "logging": {
                "diagnosticsLog": {"debugEngineAPITracing": "all", "debugRuntimeEventTracing": true, "startDebuggingTracing": true}
            },
    
            "justMyCode": false,
            "symbolOptions": {
                "searchPaths": [
                    "/home/borjamf/MIEngine/bin/Debug/vscode/linux-x64/"             
                ],
                "searchMicrosoftSymbolServer": false,
                "searchNuGetOrgSymbolServer": false
            }
         },
  7. Replace the /debugAdapters/bin folder in the C++ extension with the contents of the MIEngine build - Debug\vscode\linux-x64 and Debug\vscode.