vscode-powershell icon indicating copy to clipboard operation
vscode-powershell copied to clipboard

Not in file Scriptblock debugging create empty temporary file

Open ili101 opened this issue 2 years ago • 6 comments

Prerequisites

  • [X] I have written a descriptive issue title.
  • [X] I have searched all issues to ensure it has not already been reported.
  • [X] I have read the troubleshooting guide.
  • [X] I am sure this issue is with the extension itself and does not reproduce in a standalone PowerShell instance.
  • [X] I have verified that I am using the latest version of Visual Studio Code and the PowerShell extension.
  • [ ] If this is a security issue, I have read the security issue reporting guidance.

Summary

On stable a temporary file is created with the content of the scriptblock and debugged normally. On preview temporary empty file is created.

PowerShell Version

Name                           Value
----                           -----
PSVersion                      7.2.2
PSEdition                      Core
GitCommitId                    7.2.2
OS                             Microsoft Windows 10.0.22000
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

Visual Studio Code Version

1.66.0
e18005f0f1b33c29e81d732535d8c0e47cafb0b5
x64

Extension Version

[email protected]
[email protected]

Steps to Reproduce

$X = {
    Set-PSBreakpoint -Variable Foo
    $Foo = 0
    1
    2
    3
}.ToString()

. ([Scriptblock]::Create($X))

Visuals

image

Logs

No response

ili101 avatar Apr 02 '22 20:04 ili101

I noticed this as well while working on something attach to process related. Glad to know it's not something I just broke :)

Lookin' into it, thanks @ili101!

SeeminglyScience avatar Apr 03 '22 00:04 SeeminglyScience

Has this continued to repro?

andyleejordan avatar Apr 22 '22 16:04 andyleejordan

Yes still broken in preview

ili101 avatar Apr 22 '22 19:04 ili101

Yep it's on my list but I haven't actually done anything to fix it yet.

I was initially thinking it wouldn't be a blocker but this might make debugging pester tests in particular a huge PITA. Assuming Pester still creates anonymous scriptblocks for mocks anyway

SeeminglyScience avatar Apr 23 '22 00:04 SeeminglyScience

From Patrick: The remote file manager is for some reason not populating the file in this scenario, but is creating it.

andyleejordan avatar Aug 03 '22 18:08 andyleejordan

Easy way to repro: type "Wait-Debugger" in console.

andyleejordan avatar Aug 03 '22 18:08 andyleejordan

Ok I have a partial answer. Debugging this, in the DebugService we have this bit of code that should be getting the lines of the script...and it's not:

                    PSCommand psCommand = new PSCommand().AddScript($"list 1 {int.MaxValue}");

                    IReadOnlyList<PSObject> scriptListingLines =
                        await _executionService.ExecutePSCommandAsync<PSObject>(
                            psCommand, CancellationToken.None).ConfigureAwait(false);

Hence why that temporary file is empty. scriptListingLines is quite empty!

andyleejordan avatar Sep 07 '23 21:09 andyleejordan

Sorry this took so long @ili101 but it will be fixed in the next pre-release!

andyleejordan avatar Sep 08 '23 20:09 andyleejordan