【问题标题】:Why is not possible to put a debugging breakpoint in a variable declaration line?为什么不能在变量声明行中放置调试断点?
【发布时间】:2018-07-25 07:26:52
【问题描述】:

假设我有以下代码:

Shape shape;
shape = new Circle();

使用断点调试时,我想知道为什么不能在第一行停止执行。我知道这没什么用,但这是一个有效的声明,对吗?它正在为引用变量分配内存...

【问题讨论】:

  • 您只能为实际代码设置断点。变量声明不生成任何代码。
  • 只能在已经生成字节码的地方设置断点,这一行不创建任何。

标签: java jvm breakpoints


【解决方案1】:

我知道这很没用,但这是一个有效的声明,对吗?

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

虽然不可否认,当声明还初始化变量的值时,将其视为不是语句并不是很有帮助,因此在这种情况下虽然它仍然不称为语句,但您可以放置​​一个断点。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      问题在于,虽然编译器在概念上为第一行的引用“保留空间”,但它只需要在第二行“做某事”,所以那里只有代码,所以稍后,当你尝试要设置断点,只能在代码上进行,即第二行。

      【讨论】:

        猜你喜欢
        • 2023-03-15
        • 2011-01-09
        • 2017-04-05
        • 2021-11-24
        • 1970-01-01
        • 2016-04-23
        • 2013-08-01
        相关资源
        最近更新 更多