GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Unlike `Start-Job`, `Start-ThreadJob` doesn't respect a `Set-PSBreakpoint -Command` call in connection with `Debug-Job` · Issue #39 · PowerShell/ThreadJob

Unlike Start-Job, Start-ThreadJob doesn't respect a Set-PSBreakpoint -Command call in connection with Debug-Job #39

New issue
Copy link
New issue
Copy link
Open
Open
Unlike Start-Job, Start-ThreadJob doesn't respect a Set-PSBreakpoint -Command call in connection with Debug-Job#39
Copy link

Description

@mklement0
Michael Klement (mklement0)
opened on Sep 3, 2024
Issue body actions

Prerequisites

  • Write a descriptive title.
  • Make sure you are able to repro it on the latest version
  • Search the existing issues.

Steps to reproduce

  • When using Set-PSBreakpoint -Command from a background (child process-based) job, the Set-PSBreakpoint -Command is honored (assuming that the job is already in the Running state - see Background jobs (Start-Job) and ForEach-Object -AsJob -Parallel, in combination with Debug-Job, prematurely report being in the Running state, before being ready for debugging PowerShell#21258): the breakpoint suspends execution until the Debug-Job call connects.

  • By contrast, with a thread job, that doesn't work: the thread job runs to completion, irrespective of the break point; the same applies to ForEach-Object -AsJob -Parallel.

Write-Verbose -Verbose 'Creating a job that uses `Set-PSBreakpoint -Command foo`'
# NOTE: If you substitute `Start-Job` on the next line, the behavior is as expected.
$job = Start-ThreadJob {

  function foo {
    'hi'
  }
  
  Set-PSBreakpoint -Command foo

  foo

} 

Write-Verbose -Verbose 'Waiting an arbitrary amount of time (e.g., 3 seconds)...'
Start-Sleep 3

Write-Verbose -Verbose 'Initiating debugging...'
$job | Debug-Job

# Clean up.
$job | Remove-Job -Force

Expected behavior

Hit Command breakpoint on 'foo'

At line:3 char:16
+   function foo {
+

That is, the break point should be honored, irrespective of when Debug-Job is invoked,
and the debugger should be entered.

This is indeed how it works with a Start-Job (child process-based) job.

Actual behavior

Debug-Job: /path/to/some.ps1:42
Line |
  19 |  $job | Debug-Job
     |         ~~~~~~~~~
     | The provided job and all child jobs were examined but no jobs were found that could be debugged.  In order to debug a job or child job the job must support debugging and
     | also be in a running state.

That is, the thread job ran to completion without honoring the break point, and the attempt to call Debug-Job came too late.

Error details

No response

Environment data

PowerShell 7.5.0-preview.3

Version

2.0.3, as shipped with PowerShell Core v7.5.0-preview.3

Visuals

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      You are visitor 01402503 — GeezerVison does not store the pages you look up.
      Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.