新建了一个 ASP.NET Core 5.0 的 Web API 我的项目,当应用断点调试 Host.CreateDefaultBuilder(args) 时,进入该函数后查看两头变量的值,报错 Evaluation is not allowed: The thread is not at a GC-safe point
。在群里问了也没人回应,可能没有遇到过这个问题吧。
一. 解决问题的过程
1.Visual Studio 2022 调试
首先想到的是可能 Rider 不行,换成 Visual Studio 2022 试试,所以就查到了文献 [1],发现须要 pdb 文件,还须要设置符号什么的,感觉太麻烦了。
2.Rider 调试
而后又换成了 Rider,既然调试看不到两头变量的值,那就间接 Console.WriteLine() 进去,后果 Console 在以后上下文中基本就不存在,如下:
二. 最终的解决办法
1.YouTrack 上的解决办法
持续在网上查找,发现在 JetBrains 的官网 YouTrack 上 2,Evgeny Terekhin 在 2022 年 5 月 30 日给出了一个解决办法:
SET COMPLUS_ZapDisable=1 NGen off (CLR)
SET COMPLUS_JitMinOpts=1 Disable as much JIT optimizations as possible (CoreCLR)
SET COMPlus_TieredCompilation=0 No tiered JIT, only do one pass (CoreCLR)
SET COMPLUS_ReadyToRun=0 Don't do netcore's analog to NGen (CoreCLR)
大略的意思是对 CLR 做了设置,先不论设置的什么了,抱着试试看的心态。配置 launchSettings.json 文件:
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"COMPLUS_ZapDisable": "1",
"COMPLUS_JitMinOpts": "1",
"COMPlus_TieredCompilation": "0",
"COMPLUS_ReadyToRun": "0"
}
实现的配置文件如下所示:
2. 调试 ASP.NET Core
打上断点启动调试后,神奇般的发现也能够查看两头变量了。如下:
Rider 调试源码还是比 Visual Studio 不便很多,不须要 pdb 文件,也不须要设置什么符号,只须要进入要调试的函数中打上断点,而后启动调试即可。
参考文献:
[1]Debugging External Sources with Visual Studio:https://devblogs.microsoft.co…
[2]Debugger: Evaluation is not allowed: The thread is not at a GC-safe point:https://youtrack.jetbrains.co…
[3]When debugging, variables don’t display all of their data, instead we get ‘Evaluation is not allowed: The thread is not at a GC-safe point’:https://youtrack.jetbrains.co…
本文由 mdnice 多平台公布