Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Breakpoints can't be set by a debugger (Chrome or VS Code) while the Node program is running #11589

Closed
digeff opened this issue Feb 27, 2017 · 12 comments · Fixed by #11617
Closed
Assignees
Labels
inspector Issues and PRs related to the V8 inspector protocol

Comments

@digeff
Copy link

digeff commented Feb 27, 2017

  • Version: v7.6.0
  • Platform: Windows 10 64 bits Version 1607
  • Subsystem: V8

Setting breakpoints while the js-program is running doesn't seem to work from neither Chrome DevTools nor VS Code. The issue seems to be that the debugger calls node, and node receives and process the request, but doesn't sends the respond right away (which is what both debuggers expect). I tested this also against node 6.9.5 and the response is sent right away.

Chrome dev tools call:
{"id":14,"method":"Debugger.getPossibleBreakpoints","params":{"start":{"scriptId":"61","lineNumber":16,"columnNumber":0},"end":{"scriptId":"61","lineNumber":17,"columnNumber":0}}}

VS Code calls:
{ "id": 12, "method": "Debugger.setBreakpointByUrl", "params": { "urlRegex": "<my_path>\app\\.js", "lineNumber": 31, "columnNumber": 0 } }

The response seems to appear the next time that a breakpoint is hit or some console output is printed (I'm not exactly sure)

Following is the test program I used to reproduce this issue.

  1. node --inspect=9111 --debug-brk app.js
  2. Resume the debugger so the program continues running
  3. Attach from Chrome Dev-tools
  4. While the js-program is running, try to set a breakpoint
  5. Actual: The verified breakpoint marker doesn't appear Expected: The verified breakpoint marker does appear
'use strict';
console.log('Command line ' + process.argv.join(" "));
console.log('Hello world: 3');
console.log('Hello world: 4');
console.log('Hello world: 5');

var iterationIndex = 0;

function runIteration() {
   console.log('Starting iteration: Line 14');
    console.log('Iteration: #' + iterationIndex++);
    scheduleNextIteration();
    console.log('Ending iteration: Line 14');
}

function printTime(time) {
    return ("0" + time.getHours()).slice(-2) + ":" +
        ("0" + time.getMinutes()).slice(-2) + ":" +
        ("0" + time.getSeconds()).slice(-2);
}

var extraDelay = 60;
var minDelay = 10;

/*
extraDelay = 300;
minDelay = 300;
*/

function scheduleNextIteration() {
    var currentTime = new Date();
    var secondsUntilNextMinute = 60 - currentTime.getSeconds();
    if (secondsUntilNextMinute < minDelay) {
        secondsUntilNextMinute += extraDelay;
    }

    var millisecondsUntilNextIteration = secondsUntilNextMinute * 1000;

    var nextIterationTime = new Date(currentTime.getTime() + millisecondsUntilNextIteration);

    console.log("Current iteration running at: " + printTime(currentTime) + ". Next iteration scheduled in " + secondsUntilNextMinute + " secs at  " + printTime(nextIterationTime));
    setTimeout(runIteration,
        millisecondsUntilNextIteration);
}

runIteration();

function deadCode() {
    console.log('Hello world: 3');
    console.log('Hello world: 4');
    console.log('Hello world: 5');
    console.log('Hello world: 3');
    console.log('Hello world: 4');
    console.log('Hello world: 5');
}
@mscdex mscdex added the inspector Issues and PRs related to the V8 inspector protocol label Feb 27, 2017
@mscdex
Copy link
Contributor

mscdex commented Feb 27, 2017

/cc @nodejs/v8-inspector

@eugeneo
Copy link
Contributor

eugeneo commented Feb 28, 2017

I have a fix for this, but it is on top of #11431 - let me refactor it to a standalone one.

@eugeneo eugeneo self-assigned this Feb 28, 2017
addaleax pushed a commit that referenced this issue Mar 5, 2017
Currently Inspector posts a V8 "task" when a message is incoming. To
make sure messages are processed even when no JS is executed (e.g. while
waiting for I/O or timer), inspector will now post a libuv request.

Fixes: #11589
PR-URL: #11617
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
@mbraude
Copy link

mbraude commented Jun 20, 2017

Hello @eugeneo, this appears to have regressed in Node 8.1.2 and 9.x. Who can take a look? Our Visual Studio tooling no longer works as a result. @digeff can help get a repro or logs if the one above doesn't work.

@refack
Copy link
Contributor

refack commented Jun 20, 2017

@mbraude I can't repro with 8.1.2. How do I change the node executable, that is used?
/cc @digeff

@eugeneo
Copy link
Contributor

eugeneo commented Jun 20, 2017

I see some odd behavior with 8.1.2 - breakpoint works inside the function but not if I put at the callsite. Stack looks fine. Might be something in V8, I am investigating.

This may be different from what VS Code hit.

@refack
Copy link
Contributor

refack commented Jun 20, 2017

2017-06-20-vscode

@eugeneo
Copy link
Contributor

eugeneo commented Jun 20, 2017

I reproduced this in Chrome so it seems to be an issue in the V8. I opened Chrome bug https://bugs.chromium.org/p/chromium/issues/detail?id=735091 - please let me know if this looks similar to what you are seeing in VS code.

@nicothed
Copy link

nicothed commented Oct 3, 2018

This issue just started appearing this week (or last?). Maybe after a VS Code upgrade?
Am I the only one? How can I know where the issue is?

@alexkozy
Copy link
Member

alexkozy commented Oct 3, 2018

I tried to reproduce this issue with dedicated frontend from current stable Chrome, from latest dev Chrome and using ndb with node 8.11 and node 10.11. It looks like it works. Could you provide repro steps?

@nicothed
Copy link

nicothed commented Oct 3, 2018

Oho, so you think I should install ndb? I use node 10.5.0.
I hate to say that but it happens every time. I would say that it started about 2 weeks ago, about when I upgraded to the August version of VS Code. But that's also when I started using async/await functions. I don't think I installed new modules or anything else significant.

While I'm at it (I know it's unrelated), are there ways to edit code while debugging, and run the updated code without restarting the app? WebStorm managed to do it, but I'm unsure if VS Code can.

@roblourens
Copy link

@nicothed you are probably having an issue with debugging in VS Code, not node. If you file an issue on the vscode repo with more details, I can try to help you.

@jblazevicClover
Copy link

i deleted node_modules folder and package-lock.json, and do npm install. After that my debugger works like a charm for node and for chrome (breakpoints work)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
inspector Issues and PRs related to the V8 inspector protocol
Projects
None yet
Development

Successfully merging a pull request may close this issue.

9 participants