Change:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes/No <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --I'm currently implementing hit conditions in vscode-php-debug. Xdebug has very limited conditions it supports and we need to signal the user if they typed something unsupported. If a breakpoint has such a condition we try to return that in the field in the setBreakpointResponse/body/breakpoints. There is the implementation line: I noticed that the message is only visible when hovering with the mouse over the unverified breakpoint and only when the DAP isn't in a running state. If the adapter is in a breakpoint, there is no indication why this breakpoint isn't valid. Steps to Reproduce: and build vscode-php-debug from branch . a PHP debug Optionally add under setting. a breakpoint with hit condition "blabla". breakpoint should be unverified, hovering over it should show the message. Messages exchanged until now: launchResponse initializedEvent setBreakpointsRequest (see full message below) setBreakpointsResponse setFunctionBreakpointsRequest setFunctionBreakpointsResponse setExceptionBreakpointsRequest setExceptionBreakpointsResponse configurationDoneRequest configurationDoneResponse threadsRequest threadsResponse () a PHP process that will cause the debug adapter to move into running state. Following messages will be exchanged: ThreadEvent () StoppedEvent () threadsRequest threadsResponse () stackTraceRequest stackTraceResponse threadsRequest threadsResponse () scopesRequest scopesResponse variablesRequest variablesResponse this point hovering over the unverified breakpoint will not show the message. Full breakpoint messages Version: 1.59.0 (user setup) Commit: Date: 2021-08-04T23:13:12.822Z Electron: 13.1.7 Chrome: 91.0.4472.124 14.16.0 V8: 9.1.269.36-electron.0 OS: Windows_NT x64 10.0. Full log of message exchange (DAP and Xdebug)
Maybe a good issue to get introduced to the breakpoint message computation. Thus assigning to Code pointer where we compute breakpoint messages There is probably some check wrong depending on the debug state.
Any luck looking into this? I just want to check if there is something I did wrong before releasing. Btw: Is there any way to enable DAP logging of node/typescript adapter so I can compare messages?
we just did not have a chance to look into this yet. will probably look into it soon, if he is busy I can also help. Yes, it is possible to enable DAP logging for js-debug. Add to your and start debugging. The location of the log file on your disk will be written to the Debug Console. That log file should have the communication.
I totally lost this one, and it's fairly straightforward. This is due to us disabling editor hover in favor of the custom debug hover.
<!-- AUTHORVERIFICATIONREQUEST --This bug has been fixed in the latest release of ! you can help us out by commenting if things are now working as expected. If things still don't seem right, please ensure you're on version of Insiders (today's or later - you can use in the command palette to check), and leave a comment letting us know what isn't working as expected. Happy Coding!

Discussion:
private hoverPosition: Position | null = null; private mouseDown = false; private exceptionWidgetVisible: IContextKey<boolean>; <ins> private gutterIsHovered = false; </ins> private exceptionWidget: ExceptionWidget | undefined; private configurationWidget: FloatingClickWidget | undefined;

this.toDispose.push(this.debugService.getViewModel().onWillUpdateViews(() => this.updateInlineValuesScheduler.schedule())); this.toDispose.push(this.debugService.getViewModel().onDidEvaluateLazyExpression(() => this.updateInlineValuesScheduler.schedule())); this.toDispose.push(this.editor.onDidChangeModel(async () => { <del> const stackFrame = this.debugService.getViewModel().focusedStackFrame; const model = this.editor.getModel(); if (model) { this.applyHoverConfiguration(model, stackFrame); } </del> <ins> this.updateHoverConfiguration(); </ins> this.toggleExceptionWidget(); this.hideHoverWidget(); this._wordToLineNumbersMap = undefined; <ins> const stackFrame = this.debugService.getViewModel().focusedStackFrame; </ins> await this.updateInlineValueDecorations(stackFrame); })); this.toDispose.push(this.editor.onDidScrollChange(() => {

return this._wordToLineNumbersMap; } <ins> private updateHoverConfiguration(): void { const stackFrame = this.debugService.getViewModel().focusedStackFrame; const model = this.editor.getModel(); if (model) { this.applyHoverConfiguration(model, stackFrame); } } </ins> private applyHoverConfiguration(model: ITextModel, stackFrame: IStackFrame | undefined): void { if (stackFrame && this.uriIdentityService.extUri.isEqual(model.uri, stackFrame.source.uri)) { if (this.altListener) {

const target = mouseEvent.target; const stopKey = env.isMacintosh ? 'metaKey' : 'ctrlKey'; <ins> if (!this.altPressed) { if (target.type === MouseTargetType.GUTTER_GLYPH_MARGIN) { this.editor.updateOptions({ hover: { enabled: true } }); this.gutterIsHovered = true; } else if (this.gutterIsHovered) { this.gutterIsHovered = false; this.updateHoverConfiguration(); } } </ins> if (target.type === MouseTargetType.CONTENT_WIDGET && target.detail === DebugHoverWidget.ID && !(<any>mouseEvent.event)[stopKey]) { // mouse moved on top of debug hover widget return; } if (target.type === MouseTargetType.CONTENT_TEXT) { if (target.position && !Position.equals(target.position, this.hoverPosition)) { this.hoverPosition = target.position;