Skip to content

Commit

Permalink
Reverse sort sourceMap (#1428)
Browse files Browse the repository at this point in the history
Do reverse sort of the `sourceMap`.

In my `launch.json` configuration I have the following `sourceFileMap`:
```
            "sourceFileMap": {
                "/usr/src/debug/my-project/git-r0/build/src/../../git": "${workspaceFolder}",
                "/usr/src/debug": {
                    "editorPath": "${config:YOCTO_ARCH}",
                    "useForBreakpoints": false
                }
            },
```

The YOCTO_ARCH set in `settings.json` to:
```
    "terminal.integrated.env.linux": {
        "YOCTO_ARCH": "/home/mouse/linux-bsp/linux-devel-build/build/work/cortexa7t2hf-neon-vfpv4_linux-linux-gnueabi"
    },
```

This PR addresses an issue encountered while debugging a binary that's running on a remote system and built using Yocto. Currently, when debugging, the source files are being referenced from the Yocto build tree instead of the local workspace. This issue prevents setting breakpoints effectively in the local workspace source files.

To resolve this, the change involves modifying the way source mappings are processed. Specifically, it proposes sorting the mappings in reverse order, starting with the longer, more specific paths and moving towards the more general ones. By doing this, the debugger will first consider the project-specific paths defined in `sourceFileMap`. If it doesn't find a match there, it will then fall back to the more general paths. This reverse sorting ensures that the local workspace sources are prioritized over the Yocto build tree sources, allowing for effective breakpoint setting and debugging in the local workspace.
  • Loading branch information
ya-mouse authored Dec 4, 2023
1 parent 9f35772 commit 97b44d7
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/MICore/LaunchOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,7 @@ public static ReadOnlyCollection<SourceMapEntry> CreateCollection(Xml.LaunchOpti

public static ReadOnlyCollection<SourceMapEntry> CreateCollection(Dictionary<string, object> source)
{
IList<SourceMapEntry> sourceMaps = new List<SourceMapEntry>(source.Keys.Count);
var sourceMaps = new List<SourceMapEntry>(source.Keys.Count);

foreach (var item in source)
{
Expand Down Expand Up @@ -416,6 +416,11 @@ public static ReadOnlyCollection<SourceMapEntry> CreateCollection(Dictionary<str
throw new InvalidLaunchOptionsException(String.Format(CultureInfo.CurrentCulture, MICoreResources.Error_SourceFileMapInvalidEditorPath));
}
}

// Ensure the map is sorted such that more specific directories are in front of less specific by sorting the map
// in descending order of the compile time path
sourceMaps.Sort((x, y) => string.CompareOrdinal(y.CompileTimePath, x.CompileTimePath));

return new ReadOnlyCollection<SourceMapEntry>(sourceMaps);
}
}
Expand Down

0 comments on commit 97b44d7

Please sign in to comment.