【问题标题】:How does expressions get executed?表达式是如何执行的?
【发布时间】:2019-12-30 06:40:17
【问题描述】:

由于 C# 不是像 python 或 Clojure 这样的语言,因此可以在 REPL 中评估这些语言。那么,我们在 watch 窗口或任何评估器窗口中编写的表达式是如何即时执行的?

这可能很明显,但我无法弄清楚。

编辑:函数不是 C# 中的一等公民。每当我们附加断点时,执行就会停止,并且我们从正在运行的线程中获得当前上下文,并且每当我们更改变量值时,它就是更新线程/堆栈中的值的方式。我想了解我在窗口中编写的表达式是如何在内部执行的。

比如下面这样的简单表达式,

2 == 2

调试器是否创建了静态类和静态方法来执行表达式?为了在 CLR 中运行,它需要编译,那么它是如何工作的呢?

提前感谢您的宝贵时间。 :)

【问题讨论】:

  • 表达式在首次使用时即时编译。

标签: c# visual-studio clr


【解决方案1】:

当您在调试模式下运行应用程序时,调试器会附加到您的应用程序,它会实时跟踪当前应用程序的状态。我保存了有关当前在每个线程上执行哪个表达式、变量存储在内存中的位置等信息……这些信息在编译代码 (IL) 中的每个指令执行时更新。因此,当执行暂停并执行某些表达式时,例如更改局部变量 x 的值。所以你执行表达式,比如说x = 5,此时调试器已经知道 x 在堆栈中的存储位置,因此他可以编译我们的表达式并将其“注入”到当前进程。

【讨论】:

    猜你喜欢
    • 2010-11-11
    • 2022-10-07
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 2016-02-16
    • 1970-01-01
    相关资源
    最近更新 更多