M1 Mac上Rider调试步入async方法时Dotnet程序崩溃
Rider调试Async方法时会话直接终止问题求助
在M1 MacBook Pro上使用Rider调试C#代码时,每次尝试步入async方法,调试会话就会立即终止。该问题最初在AspNetCore应用中发现,且可在简单控制台程序中复现,复现代码如下:
Console.WriteLine("Start"); // 可正常步入 Hello(); // 步入时程序立即崩溃 await HelloAsync(); Console.WriteLine("End"); void Hello() { Console.Write("Hello sync"); } async Task HelloAsync() { await Task.Delay(100); Console.Write("Hello async"); }
已知信息
- 问题出现于安装.NET 7前后,不确定是否为直接诱因
- Rider日志显示是目标程序而非调试器崩溃
- Visual Studio for Mac无此问题,但最近三个版本的Rider均出现该问题
- 设备为M1 MacBook Pro,怀疑与ARM架构相关
已尝试的排查步骤
- 安装不同版本的Rider
- 卸载所有.NET SDK后单独重装.NET 6或.NET 7
- 将测试项目从.NET 6重新定向到.NET 7
- 重启系统
已准备向JetBrains提交Bug报告,希望获取更多排查思路或问题原因分析。以下是相关Rider日志片段:
调试触发崩溃的日志片段
07:04:14.312 |V| RiderDebuggerSessionFrontend | ClientSocket-DebuggerWorkerToFrontend-Receiver:13 | 收到来自前端的调试器命令:StepIntoActionModel () 07:04:14.371 |I| CorRuntimeEventProcessor | 调试器工作线程MTA主线程:6 | 目标进程已退出 07:04:14.372 |V| RiderDebuggerSessionFrontend | 调试器工作线程MTA主线程:6 | 来自调试器的事件:类型 TargetExited 07:04:14.372 |V| RiderDebuggerWorker | 调试器工作线程MTA主线程:6 | 向前端发送目标进程退出事件
调试器断开连接日志(目标程序崩溃导致)
05:46:51.427 |V| Client | ClientSocket-DebuggerWorkerHost::10-Receiver:72 | ClientSocket-DebuggerWorkerHost::10 连接已正常关闭 05:46:51.427 |V| Client | ClientSocket-DebuggerWorkerHost::10-Receiver:72 | ClientSocket-DebuggerWorkerHost::10: 总流量:发送690,接收4436 05:46:51.427 |V| ClientSocket-DebuggerWorkerHost::10-Sender| ClientSocket-DebuggerWorkerHost::10-Receiver:72 | 暂停('已断开连接'):: 状态=异步处理 05:46:51.427 |V| Client | ClientSocket-DebuggerWorkerHost::10-Receiver:72 | ClientSocket-DebuggerWorkerHost::10: 正在连接到127.0.0.1:51839。 05:46:51.427 |V| Client | ClientSocket-DebuggerWorkerHost::10-Receiver:72 | ClientSocket-DebuggerWorkerHost::10: 端点"127.0.0.1:51839"连接错误。连接被拒绝 127.0.0.1:51839 --- 异常 #1/2 [ExtendedSocketException] 消息 = “连接被拒绝” 异常路径 = Root.InnerException 类名 = System.Net.Internals.SocketExceptionFactory+ExtendedSocketException HResult = E_FAIL=EFail=80004005 来源 = System.Net.Sockets 本地错误码 = 61 堆栈跟踪 = “ 在 System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) (位于 DoConnect.il:行 IL_007C mvid A973) 在 System.Net.Sockets.Socket.Connect(EndPoint remoteEP) (位于 Connect.il:行 IL_00E6 mvid A973) 在 JetBrains.Rd.Impl.SocketWire.Client.<>c__DisplayClass1_0.<.ctor>b__0() (位于 Client.il:行 IL_0069 mvid E45C) ” --- 外层异常 --- --- 异常 #2/2 [LoggerException] 消息 = “ClientSocket-DebuggerWorkerHost::10: 端点"127.0.0.1:51839"连接错误。连接被拒绝 127.0.0.1:51839” 异常路径 = Root 类名 = JetBrains.Util.LoggerException 内部异常 = “异常 #1 在 Root.InnerException” HResult = COR_E_APPLICATION=80131600 堆栈跟踪 = “ 在 JetBrains.Util.LoggerBase.Log(LoggingLevel level, String message, Exception ex) (位于 Log.il:行 IL_0024 mvid A7F4) 在 JetBrains.Diagnostics.LogEx.Verbose(ILog this, Exception ex, String message) (位于 Verbose.il:行 IL_0000 mvid 89A1 或 Verbose.il:行 IL_0008 mvid 89A1) 在 JetBrains.Diagnostics.LogEx.Verbose(ILog logger, Exception ex, JetLogVerboseInterpolatedStringHandler& messageHandler) (位于 Verbose.il:行 IL_0000 mvid 89A1 或 Verbose.il:行 IL_0008 mvid 89A1) 在 JetBrains.Rd.Impl.SocketWire.Client.<>c__DisplayClass1_0.<.ctor>b__0() (位于 Client.il:行 IL_0069 mvid E45C) 在 System.Threading.Thread.StartHelper.Callback(Object state) (位于 Callback.il:行 IL_0000 mvid 5DC4) 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) (位于 RunInternal.il:行 IL_0040 mvid 5DC4) ”
补充排查思路
- 切换Rider调试引擎:进入Rider设置
Build, Execution, Deployment > Debugger > .NET Debugging,尝试切换调试引擎(如CoreCLR调试器与旧版调试器互换) - 生成崩溃转储:在调试配置中勾选“Enable dump collection”,程序崩溃后通过dump文件分析具体崩溃原因
- 调整项目编译设置:在项目属性中禁用
Nullable reference types等可能影响async方法编译的选项,测试是否解决问题 - 验证.NET架构版本:通过
dotnet --info确认安装的.NET 6/7 SDK为原生ARM64版本,而非x64转译版本 - 以管理员权限运行Rider:在M1 Mac上尝试用管理员权限启动Rider,排除权限不足导致的调试问题
内容的提问来源于stack exchange,提问作者brads3290
相关产品推荐
相关产品推荐

