`EnsureProperPathSeparators()` causes wrong paths with Cygwin
oold opened this issue · 0 comments
LinesForFile()
fails to get the source lines for binaries built with Cygwin tools.
An incorrect path is returned from EnsureProperPathSeparators()
:
MIEngine/src/MIDebugEngine/Engine.Impl/SourceLine.cs
Lines 93 to 95 in ad8e28a
This is because EnsureProperPathSeparators()
calls MapWindowsToCygwin()
when debugging with a Cygwin gdb:
MIEngine/src/MIDebugEngine/Engine.Impl/DebuggedProcess.cs
Lines 1525 to 1529 in ad8e28a
MapWindowsToCygwin()
calls UnixPathToWindowsPath()
and this is the actual mistake that leads to the incorrect result:
UnixPathToWindowsPath()
replaces the slashes with backslashes:
MIEngine/src/MICore/PlatformUtilities.cs
Line 92 in ad8e28a
When LaunchCygPathAndReadResult()
receives the "Windows" path, it doesn't look like an absolute path anymore, so it prepends the current working drive.
This fails if, for example, a breakpoint is created, GetBoundBreakpoint()
gets called, and the fullname
contains a Cygwin path.
Expected result for EnsureProperPathSeparators()
:
Input: /c/src/a.cpp
Conversion: /c/src/a.cpp
-> /c/src/a.cpp
-> /c/src/a.cpp
Output: /c/src/a.cpp
Actual result for EnsureProperPathSeparators()
:
Input: /c/src/a.cpp
Conversion: /c/src/a.cpp
-> \c\src\a.cpp
-> /c/c/src/a.cpp
Output: /c/c/src/a.cpp