调试C#单元测试时字符串插值失败、目标进程退出问题排查
调试单元测试时字符串插值执行失败问题
调试过程中报错信息:评估函数System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode时目标进程已退出。
问题场景参考截图:
当前代码已引入的命名空间:
using Microsoft.Data.SqlClient; using Microsoft.VisualStudio.TestTools.UnitTesting; using System;
经测试,以下代码可正常运行:
[TestMethod] public void Mult() { var coeff = (decimal) 0.0015; var edge = (int)400; var n = coeff * edge; var s = $"n is "+n.ToString(); Debug.Print(s); }
问题原因
该报错属于Visual Studio调试器的已知评估问题,和业务代码逻辑无关:
- 调试器在监视窗口、即时窗口计算未完全求值的插值字符串时,会隐式调用
RuntimeHelpers.GetHashCode做对象标记校验,如果此时测试执行宿主已经运行结束进入资源回收阶段,或者单步执行时进程状态短暂不可用,就会抛出目标进程退出的评估错误。 - 上述可正常运行的代码没有触发报错,是因为代码中对计算得到的
n显式调用了ToString(),拼接的字符串是已经完成计算的静态值,调试器读取值时不需要触发隐式哈希计算,因此不会触发异常。
处理方案
- 调试阶段需要查看字符串结果时,可以参照可运行代码的写法,对插值位置的变量显式做
ToString()转换后再拼接,避免调试器触发隐式求值逻辑。 - 将Visual Studio升级到最新稳定版本,新版本调试器已经修复了多数插值字符串的求值异常问题。
内容的提问来源于stack exchange,提问作者Kirsten
相关产品推荐
相关产品推荐

