新建了一个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多平台公布