.net 如何引发运行时异常
我开始阅读关于CLR的文章,想知道运行时异常是如何抛出的 当出现语法错误时,如果我们试图构建程序,编译器会检测到它并抛出错误。在这种情况下,IL不会由编译器生成(我假设它不会创建。请澄清),但当存在运行时错误的可能性时(例如被零除或引用null),编译器无法检测到这一点并生成IL 在运行程序时,JIT使用此IL并生成机器代码。现在,当机器代码执行除法为零的步骤时,抛出一个异常 当出现此类异常时,它将显示在visual studio中,显示发生此异常的行。这是怎么做到的.net 如何引发运行时异常,.net,runtime,clr,jit,runtimeexception,.net,Runtime,Clr,Jit,Runtimeexception,我开始阅读关于CLR的文章,想知道运行时异常是如何抛出的 当出现语法错误时,如果我们试图构建程序,编译器会检测到它并抛出错误。在这种情况下,IL不会由编译器生成(我假设它不会创建。请澄清),但当存在运行时错误的可能性时(例如被零除或引用null),编译器无法检测到这一点并生成IL 在运行程序时,JIT使用此IL并生成机器代码。现在,当机器代码执行除法为零的步骤时,抛出一个异常 当出现此类异常时,它将显示在visual studio中,显示发生此异常的行。这是怎么做到的 希望我的问题清楚 基本上,
希望我的问题清楚 基本上,当您运行代码时,执行是逐行进行的。当异常发生时,会创建一个类型为
exception class
的对象,例如除以零。如果您正在使用异常处理捕获异常,并且您编写了如下内容:
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
引发的异常的对象引用被复制到ex
变量(在上述情况下)并
您的程序不会终止,只要正确处理异常,您可以进一步移动
因此,它基本上是在异常生成代码行附近创建的异常类对象
,该代码包含有关错误的信息,您可以在catch块中复制该引用来处理它
如果没有异常处理-try,catch()
,则程序终止并显示技术消息
请看下面的内容以了解清楚的想法:VisualStudio创建PDB文件,其中包含该指令的机器代码位置和源代码位置之间的映射 就像我们编写代码来检查某个条件并抛出异常一样,对于运行时异常,条件是由jit生成的,用机器语言检查错误并抛出异常。因此,在每次除法操作之前,运行时将进行零检查,并引发异常。为了利用具有先进技术的最新CPU,这些CPU以不同的方式实现和执行,而不是将其作为IL中的显式指令 当出现这种异常时,clr将指令映射到PDB文件中并返回源代码。如果删除PDB并从命令行运行,则不会看到任何行号信息。调试器是一个程序,它将clr代码与PDB一起加载,并执行所有映射。VisualStudio只需获取行号并为您打开文件。有大量的调试器API,可用于获取VisualStudio显示的运行时值