首页 > 编程语言 >Rider调试ASP.NET Core时报thread not gc-safe的解决方法

Rider调试ASP.NET Core时报thread not gc-safe的解决方法

时间:2022-08-25 00:23:23浏览次数:83  
标签:Core ASP thread COMPLUS safe Studio Rider 调试

新建了一个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][3],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.com/visualstudio/debugging-external-sources-with-visual-studio/
[2]Debugger: Evaluation is not allowed: The thread is not at a GC-safe point:https://youtrack.jetbrains.com/issue/RIDER-40357
[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.com/issue/RIDER-10885/When-debugging-variables-dont-display-all-of-their-data-instead-we-get-Evaluation-is-not-allowed-The-thread-is-not-at-a-GC-safe

 

转 https://www.cnblogs.com/shengshengwang/p/16573520.html

标签:Core,ASP,thread,COMPLUS,safe,Studio,Rider,调试
From: https://www.cnblogs.com/wl-blog/p/16622798.html

相关文章

  • 面经-并发-对ThreadLocal(线程隔离)的理解
    ThreadLocal作用:1.线程隔离。线程间:ThreadLocal可实现资源对象的线程隔离,让每个线程各用各的资源对象,避免争用引发的线程安全问题。2.资源共享。线程内:ThreadLocal同时实......
  • ForkJoinPool源码分析之四(ForkJoinWorkerThread源码)
    一、类结构及其成员变量1.1类结构和注释类结构代码如下:publicclassForkJoinWorkerThreadextendsThread{}ForkJoinWorkerThread继承了Thread类,ForkJoinWo......
  • core
    core:centreofsuchfruitsastheappleandpear,containingtheseeds果心kernelsoftandusuallyediblepartinsideanutorfruitstone(坚果或核果的)仁......
  • ASP.NET Core Docker容器部署
    最简单的部署操作方式1.安装辅助工具1.1安装Gitsudoyum-yinstallgit安装完成后输入git命令查看1.2安装Nginx(这种部署方式暂时没用到)参考文档:https://......
  • NetCore异步编程CancellationToken
    十年河东,十年河西,莫欺少年穷学无止境,精益求精关于异步编程,很久之前就写过一遍博客:asp.netcore系列5项目实战之:NetCore的async和await(参考自:Microsoft教程)今天继......
  • ThreadLocal 分析
    1.先说说他的作用哦,提供线程内的局部变量,不同线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。......
  • FFmpeg-FFmpeg编译时静态链接libwinpthread
    FFmpeg-FFmpeg编译时静态链接libwinpthread需求是在Windows下编译ffmpeg的可执行档ffmpeg.exe,ffmpeg.exe倒是编译出来了,但是运行时总是报错:后来搜了一下,是缺少libwinp......
  • 深入理解Java中的Thread.sleep
    Thread.sleep()方法能够已毫秒为时间单位暂停当前执行的线程,参数值为毫秒不能为负数,否则将抛出IllegalArgumentException异常。Java线程休眠要点:1.它总是暂停当前执行的......
  • 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态
    问题:无法向会话状态服务器发出会话状态请求。请确保ASP.NETStateService(ASP.NET状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检......
  • 关于rt-thread调度器实现的底层代码分析
      本文使用了rt-thread自带的钩子函数和显示函数进行了实验,从rt-thread自带的延时函数rt_thread_delay()函数入手,对rt-thread系统的调度器进行分析。主要参考资料是野火......