You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调试时字符串插值触发NullReferenceException异常问题

更新的更新(这情况越来越离谱了)

我现在完全懵了。我注意到之前的更新里第7行的{b}后少了个句号,于是为了准确我补上了它。

!!!现在第7行单步执行时也会失败了!!!

这到底是怎么回事???

现在的Program.cs出现了更诡异的结果……

try
{
    var a = "a";
    var b = "b";
    var r1 = "r";
    var r1x = $"r2x1={a}.{b}.{r1}";  // < Line 6 - 在此处按F10会触发异常
    var r1y = $"r2x1={a}.{b}" + r1;  // < Line 7 - 在此处按F10可正常执行!
    var r1z = $"r2x1={a}.{b}." + r1; // < Line 8 - 在此处按F10会触发异常!!!
    var r1a = $"r2x1={a}.{b}{r1}";   // < Line 9 - 在此处按F10会触发异常
    Console.WriteLine(r1x);
    
}
catch (NullReferenceException e)
{
    Console.WriteLine(e);
}

更新内容

我进一步测试后发现,问题似乎与字符串插值直接相关。在下方更新后的Program.cs中,给第6行(var r1x = ...)加断点,按F10单步执行会触发异常,但按F5直接运行则无异常。不过如果同时给第7行(var r1y = ...)加断点,按F10单步执行却能正常通过!

try
{
    var a = "a";
    var b = "b";
    var r1 = "r";
    var r1x = $"r2x1={a}.{b}.{r1}"; // < Line 6 - 在此处按F10会触发异常
    var r1y = $"r2x1={a}.{b}" + r1; // < Line 7 - 在此处按F10可正常执行!
    Console.WriteLine(r1x);
    
}
catch (NullReferenceException e)
{
    Console.WriteLine(e);
    
}

原始问题

Program.cs代码如下:

try
{
    var a = "a";
    var b = "b";
    var r1 = "r";
    var r2 = "r";
    r1 = $"r1={a}.{b}.{r1}";
    r2 = $"r2={a}.{b}.{r2}";
    Console.WriteLine(r1);
    Console.WriteLine(r2);

}
catch (NullReferenceException e)
{
    Console.WriteLine(e.StackTrace);
}

这段简单的代码在不使用调试器逐行单步执行时运行完全正常。

但如果在第8行(r2 = ...)设置断点,单步执行时会进入catch块,抛出NullReferenceException,异常栈信息如下:

System.NullReferenceException: Object reference not set to an instance of an object.
   at System.Buffer.Memmove(Byte& dest, Byte& src, UIntPtr len)
   at System.Runtime.CompilerServices.DefaultInterpolatedStringHandler.AppendStringDirect(String value)
   at Program.<Main>$(String[] args) in /Users/rambler/tmp/Four Weeks/why/ConsoleApp1/Program.cs:line 8

同样,在第7行设置断点也会出现相同异常。但如果不在这两行设置断点,代码就能无异常运行。

我尝试了r1 = ...和r2 = ...的多种写法,部分写法在插值中使用r1(或r2),结果难以捉摸。

但无论哪种情况,只要不调试特定行,代码就能正常运行。

目前我在Mac上的Rider和Visual Studio Code中都复现了该问题,之后会在Windows上测试是否能复现。

这个问题是在我开发一个大型应用时发现的,最终将问题范围缩小到上述代码。

.NET版本:7.0.203

内容的提问来源于stack exchange,提问作者Rachel Ambler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:32:38