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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions