diff --git a/src/System.Management.Automation/engine/debugger/debugger.cs b/src/System.Management.Automation/engine/debugger/debugger.cs index c91092772bc..68b6d1a296e 100644 --- a/src/System.Management.Automation/engine/debugger/debugger.cs +++ b/src/System.Management.Automation/engine/debugger/debugger.cs @@ -982,7 +982,7 @@ internal ScriptDebugger(ExecutionContext context) _inBreakpoint = false; _idToBreakpoint = new ConcurrentDictionary(); // The string key is function context file path. The int key is sequencePoint index. - _pendingBreakpoints = new ConcurrentDictionary>(); + _pendingBreakpoints = new ConcurrentDictionary>(StringComparer.OrdinalIgnoreCase); _boundBreakpoints = new ConcurrentDictionary>>(StringComparer.OrdinalIgnoreCase); _commandBreakpoints = new ConcurrentDictionary(); _variableBreakpoints = new ConcurrentDictionary>(StringComparer.OrdinalIgnoreCase); diff --git a/test/powershell/Language/Scripting/Debugging/DebuggerScriptTests.Tests.ps1 b/test/powershell/Language/Scripting/Debugging/DebuggerScriptTests.Tests.ps1 index 1cf588427cc..3dc799f169c 100644 --- a/test/powershell/Language/Scripting/Debugging/DebuggerScriptTests.Tests.ps1 +++ b/test/powershell/Language/Scripting/Debugging/DebuggerScriptTests.Tests.ps1 @@ -643,3 +643,20 @@ Describe "Sometimes line breakpoints are ignored" -Tags "CI" { if (Test-Path -Path $tempFileName2) { Remove-Item $tempFileName2 -Force } } } + +Describe 'Breakpoints use case-insensitive match for script paths' -Tags 'CI' { + # https://github.com/PowerShell/PowerShell/issues/20044 + # Running on Windows only as Set-PSBreakpoint does case sensitive check on provided path on Unix + It 'Hits breakpoint' -Skip:(!$IsWindows) { + $filePath = Join-Path -Path $TestDrive -ChildPath 'demoIssue20044.ps1' + Set-Content -Path $filePath -Value "'Hello World'" + + $bp = Set-PSBreakpoint -Script $filePath.ToUpper() -Line 1 -Action { continue } + + & $filePath + + $bp.HitCount | Should -Be 1 + + if ($null -ne $bp) { Remove-PSBreakpoint $bp } + } +}