gpt4 book ai didi

c# - 为什么 NullReferenceException 不包含有关什么是 null 的信息?

转载 作者:IT王子 更新时间:2023-10-29 03:41:51 26 4
gpt4 key购买 nike

NullReferenceException 不包含除基类数据(如堆栈跟踪)之外的任何运行时特定信息的设计决策是什么?是否有 Visual Studio 的扩展可以直接告诉您表达式的哪一部分为空?

最佳答案

NRE 是一个非常低级的异常。这是处理器在被要求从低于 64K 的地址读取数据时产生的硬件异常(“陷阱”)。虚拟内存空间的该区域始终未映射,专门用于捕获指针错误。它以 AccessViolation 开始,本地址小于 0x00010000 时由 CLR 变成 NRE。那时异常的上下文非常少,所知道的只是导致陷阱的机器代码指令的地址。

不可能将该机器代码指令地址反向工程回程序中的命名变量。它以这种方式工作很重要,否则抖动将不得不生成非常低效的代码。可以合理地做的就是恢复源代码行号。这需要包含行号信息的调试信息(.pdb)。 CLR 知道如何读取 .pdb 文件并使用它来生成异常的堆栈跟踪。然而,由于 JIT 优化器执行的优化,这通常仍然不准确,它移动代码。您只会获得与调试版本的保证匹配。发布版本的 PDB 不包含源代码行号信息的原因。你可以改变它。

这个问题有一个非常简单的解决方案。在让运行时执行之前,您自己检查 null 并生成您自己的异常。测试非常便宜,不到一纳秒。

关于c# - 为什么 NullReferenceException 不包含有关什么是 null 的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4719047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com