-
Notifications
You must be signed in to change notification settings - Fork 789
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 doesnt work with anonymous records in .net core sdk #6512
Comments
/cc @Krzysztof-Cieslak FYI , because affect anon record debugging in vscode |
I can also reproduce this on Windows 10 with .NET Core
|
Reproduced in VS as well. @dsyme @KevinRansom are we emitting the appropriate PDB info? |
In VS any use of non-commented-out anonymous records breaks all ability to debug with breakpoints. |
@cartermp, great issue, it needs to be looked at for sure. |
@dsyme @KevinRansom @TIHan this one is rather severe. It's impossible for me to debug anything if I use anonymous records. Example: open System
[<EntryPoint>]
let main argv =
printfn "Hey"
let data = {| X = 1; Y = "abc" |}
let result = data.X + data.Y.Length
let newData = {| data with Z = data.X + 5 |}
0 // return an integer exit code Set a breakpoint on each line in VS and observe that none are ever hit (not even the first |
I will look at it early next week, or perhaps even over the weekend. |
@KevinRansom have you had a chance to look at this one? |
I checked ValidateBreakpointLocationImpl and it has an entry: | SynExpr.AnonRecd (_isStruct, copyExprOpt, fs, _) ->
match copyExprOpt with
| Some (e, _) -> yield! walkExpr true e
| None -> ()
yield! walkExprs (fs |> List.map snd) so not yet sure what the cause of this could be |
@dsyme IIRC that member is called when setting the breakpoint, but I'm not sure if it's called when you're actually debugging. |
It appears I'm still experiencing this issue after Visual Studio's 16.1.1 update with FSharp.Core 4.6.2, is there something else I need to update? |
Thanks @lfr, this is not resolved. @KevinRansom @brettfo @TIHan Much of what we slated for 16.1 was never pulled in, see here: https://github.com/dotnet/fsharp/commits/Visual-Studio-2019-Version-16.1?after=42526fe359672a05fd562dc16a91a43d0fe047a7+34 |
Is this problem fixed I still have unverified breakpoints in Vscode |
@afshawnlotfi Yes, but the compiler with the fix has not be released yet. |
Alright well for now I guess I'll just keep everything not anonymous and put a TODO to change it later |
@afshawnlotfi , this will be shipped with VS2019.2. It is currently in preview you can download the VS priview here: https://visualstudio.microsoft.com/vs/preview/?OCID=AID2318528_SEM_u43DwN0V&MarinID=u43DwN0V_79233641541298_visual%20studio%20preview_be_c__1267737265630647_kwd-79233812309844:loc-190_ |
What if I want to use it with Vscode. Would I have to wait for the new version of dotnet CLI |
A dotnet cli ships with the preview, and it matches the vs compiler. |
@KevinRansom @brettfo @TIHan This is still not resolved in the VS 16.2 Preview 4 builds. Can the fix get flowed into a release branch before we release? |
Looks like the fix is in the branch. But it doesn't resolve anything. |
@cartermp THe debugging is working for me with a fresh build of the compiler from master and running as .NET Framework program a.fs:
then
I can set break point and hit it. I'll check .NET Core separately I suppose. |
As mentioned offline we need to test netcoreapp (where it failed) and against a release branch, since master is not what is shipping |
I looked at this and can repro that there is still a major problem on .NET Core. It is really surprising to have two blocking issues on this debugging. Something about the very existence of any anon-record types in the assembly seems to hork debugging on .NET Core. I'm going to keep digging into it, but I'm quite concerned as I believe it must be something in the C# debug engine which is somehow failing for these specific types. But what that could be and why that would interfere with breakpoints specifically I really don't understand. I'll list repro instructions here tomorrow. |
Tagging @tmat as well - we'll need to dig into this for sure. |
OK, I've confirmed this is something to do with portable PDB generation. I'm not sure what it could be but it's definitely the issue If a.fs contains a use of an anonymous record then with this I can't set breakpoints:
but with old-fashioned PDB I can set breakpoints:
This might be one for you @KevinRansom, or at least how do we proceed fro here - is there a tool to debug dump the portable PDB file generated It's very odd as there's nothing that unusual about the code generated. For the record, other things I've investigated today:
So what remains is pretty "normal" code for a record type really. I'm not sure why we would be failing to generate a correct portable PDB just because an anonymous record class is generated too. |
|
There's been anonymous classes in C# for a while, don't F# anonymous records use the same mechanism underneath? |
Is the debugger code itself open source? Can we somehow debug it? I couldn't find any useful documentation around that area (probably because Google fails me there). I assume it is because Omnisharp somehow seems to work on Ubuntu as well, or is that a false assumption? Maybe we can ping people who would know more? |
They do. We generate almost identical code. That's why this is so mysterious. Will try to dig into it again now. |
Running
I'll look into it more |
Is this seriously still a problem now. This was reported in April. Just saying if this were C# this would have been patched the first week. |
Hello! If I try to debug the following code it does not hit on
But when I try to debug this code It works very well
Do I have to install or update something? |
@renato04 this will be in the compiler that corresponds to the VS 16.3 update. If you use the previews, it should already be in. |
@cartermp which .NET Core version works properly with F# anon records and debugger? Any 2.2.xxx? Because of this I switched from 2.2.402 -> 3.0.100, however I am not able to migrate everything so quickly to 3.0, and wondering if there is any 2.2.xxx version which works properly ... |
@deyanp it is in the 3.0.x SDK. .NET Core 2.2.x is now officially out of support, so I recommend switching to 3.0.x. |
Setting breakpoint if the code contains anonymous records, doesnt work
I not yet tried in VS, but with latest .net core debugger and latest .net core sdks affect vscode
Ionide doesnt matter, the debugger is in MS code and i am using the VSCode Debug tab with tasks.json and launch.json
Repro steps
create a simple program with
dotnet new console -lang f#
and set some breakpoint at the instructions.
Running in debug, it stop on breakpoint and debug works
if i uncomment the lines, the debugger doesnt stop on any breakpoint (not just anon records)
if i set debugger to stop at entry point, it stop an entry and i can step by step, but breakpoint are not enabled
the debug info show it cannot bind the line to breakpoint
Expected behavior
breakpoints works
Actual behavior
breakpoints doesnt works
Known workarounds
stop at entry point maybe, in vscode is done at
launch.json
Related information
can repro in .NET Core
2.1.603
and3.0.100-preview3-010431
C# VSCode extension (who contains the debugger stuff)
The text was updated successfully, but these errors were encountered: