java - 为什么我不能在未初始化的局部变量上放置断点?

标签 java breakpoints local-variables

为什么我无法在 String a; 行上放置断点?

public void localMethod() {
    String a;
    a = "haha";
    System.out.println(a);
}

我知道局部变量在显式为其赋值之前不会被初始化。 但它只是一行代码,它做了一些事情。为什么我不能停在那里? 哪些行可以作为断点?

我使用的是Eclipse,jdk6_31

最佳答案

声明本身并不是真正的可执行代码 - 它只是声明某些东西的存在。您应该能够在第二行上放置一个断点,这实际上做了一些事情。

诚然,我不明白为什么 IDE 不应该支持向不可执行行添加断点的概念 - 它可能必须真正在可执行文件中安装断点执行环境中的点...

编辑:为了澄清我的意思,这段代码:

public void foo() {
    String a;
    String b;
    a = "hello";
    b = " world";
    System.out.println(a + b);        
}

将编译为与以下内容相同的字节码:

public void foo() {
    String a;
    a = "hello";
    String b;
    b = " world";
    System.out.println(a + b);        
}

由于声明,没有代码必须执行 - 它不会在该时间点保留空间或类似的东西。编译器在方法的堆栈空间内分配一个“槽”,并将在整个方法中使用该槽 - 但它可以重用同一槽,而无需额外的初始化,即使变量是在循环内声明的,例如。

关于java - 为什么我不能在未初始化的局部变量上放置断点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10336105/

相关文章:

java - 局部变量可以在方法外使用吗?

mysql - 如何在 db2 中声明和递增局部变量?

Java:使用 char** 和回调作为参数加载 c++ dll

java - 如何在 hazelcast 3.x 中显示所有结构名称

Java 以编程方式设置断点

ios - 从运行循环中删除 CADisplayLink 时,游戏有时会崩溃

c++ - 在 C++ 的 void 函数中可以有很多参数吗?

java - 如何从 Java 应用程序运行进程?

java - 如何使用 Jsoup 从每个 div 中首先获取 href 标签

vb.net 当值改变时添加观察停止