代码之家  ›  专栏  ›  技术社区  ›  Héctor

为什么不能在变量声明行中放置调试断点?

  •  1
  • Héctor  · 技术社区  · 6 年前

    假设我有以下代码:

    Shape shape;
    shape = new Circle();
    

    当使用断点进行调试时,我想知道为什么不可能在第一行停止执行。我知道这很没用,但这是一个有效的说法,对吧?它正在为引用变量分配内存…

    3 回复  |  直到 6 年前
        1
  •  2
  •   kumesana    6 年前

    我知道这很没用,但这是一个有效的说法,对吧?

    从技术上讲,这不是一个声明。它是一个变量声明,而那些不是语句。

    尽管无可否认,当一个声明也初始化了变量的值时,将它作为非语句计数并不是很有帮助,所以在这种情况下,尽管它仍然不被称为语句,但您可以放置一个断点。

    它正在为引用变量分配内存…

    不。当需要存储局部变量时,它们被存储在堆栈上,或者底层平台实现堆栈功能的任何机制上。这不需要分配。因此,这一行是不可操作的,它只是为编译器做一些事情的信息,在运行时不存在。

        2
  •  1
  •   Nikos Chatzivasileiadis    6 年前

    您可以在任何一行可执行代码上设置断点。( Shape shape; )不是真正的可执行代码

        3
  •  1
  •   Gwyn Evans    6 年前

    问题是,虽然编译器在概念上为第一行的引用保留了空间,但它只需要在第二行做一些事情,所以那里只有代码,所以稍后,当您试图设置断点时,它只可能在代码上,即第二行。