Skip to content

Consider adding debug points for boolean logic #11980

@dsyme

Description

@dsyme

Complex boolean logic is quite common in F#, e.g. see examples below. It is really hard to debug.

I propose we add debug points on left and right of a && b and a || b so you can step through this logic and hit breakpoints.

C# doesn't allow breaking in boolean logic or any expression. However

  1. F# already steps through any match and if ... then .. else expressions so adding this seems natural enough.
  2. I believe complex boolean logic is more common in F# than C# because of the expression-oriented nature of the language

A possible downside is that of "too much stepping" so it takes too long to step through a function. However I've been frustrated by the lack of debugging for boolean logic enough that I think we should prefer the addditional debug points.

Examples

let isRecdOrStructTyconRefAssumedImmutable (g: TcGlobals) (tcref: TyconRef) =
    tcref.CanDeref &&
    not (isRecdOrUnionOrStructTyconRefDefinitelyMutable tcref) ||
    tyconRefEq g tcref g.decimal_tcr ||
    tyconRefEq g tcref g.date_tcr

or

MicrosoftTeams-image

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area-Debugstepping, debug points, stacks and moreFeature ImprovementImpact-Low(Internal MS Team use only) Describes an issue with limited impact on existing code.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions