当前位置: 首页 > 面试题库 >

在Java中设置断点

穆锋
2023-03-14
问题内容

在Java中设置断点如何工作?它仅基于源文件名和行号吗?类或方法名称是否也存在?

如果调试器中有旧版本的源代码并设置了断点,则逐步执行时光标会关闭。距离有多远?它会进入错误的方法中吗(如果该文件中有多个类,甚至是错误的类)?

当JVM中有多个同名的类时,会发生什么情况(如果您有多个类加载器,可能会发生这种情况)?他们都得到断点了吗?

在Web应用程序容器中,是否可以仅为一个Web应用程序(而不是其他Web应用程序)设置断点?

其中有多少是特定于IDE的,有多少是由JVM提供的调试接口确定的?例如:在Eclipse中,我可以基于变量的值设置条件断点。这仅仅是由Eclipse在JVM中的无条件断点处完成的过滤吗?


问题答案:

有不同类型的断点。有些断点是基于行的,有些则不是。这如何影响您的实际调试取决于您的IDE实际执行的操作。例如,在Eclipse中,如果在方法中间添加一个断点,则它将是基于行的断点。如果在包含方法签名的行上添加断点,则该断点将为方法条目断点。

如果您正在查看的源代码不是正在运行的类的确切源,则行断点当然不会映射到正确的行。因此,java可能不会停止在您期望的行上,并且IDE的确可能向您显示了错误的方法甚至错误的类。但是,即使定义方法的行已更改,方法输入断点仍将起作用(在正确的时间停止)。但是同样,IDE可能会在调试器中显示错误的行。(还有其他类型的事件/断点,例如类加载,…
如果您想了解更多有关内部的信息,可以看看EventRequest的子接口)。

回答另一个问题:断点适用于JVM中的所有类加载器。



 类似资料:
  • 问题内容: 因此,该资源(http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html)建议在该线程不处理中断本身时将其设置为“ 这样,调用堆栈中更高级别的代码就可以了解中断并在需要时对其进行响应 。” 假设我正在使用ExecutorService在其他线程中运行某些内容。我构造一个Callable并将此Callable传

  • 2、设置中断向量 (1)、DOS功能调用的方法 中断21H之功能25H可为指定的中断号设置新的入口地址。其使用方法如下: 入口参数:AH=中断号,DS:DX=中断处理程序的入口地址 出口参数:无 例8.17 用功能调用的方法把子程序NewFunc设置为中断n的中断处理程序。 解: …… NewFunc PROC …… IRET ;注意其返回指令 NewFunc ENDP …… MOV AX, SE

  • namespace Foo { void foo() { } } namespace { void bar() { } } 技巧 在gdb中,如果要对namespace Foo中的foo函数设置断点,可以使用如下命令: (gdb) b Foo::foo 如果要对匿名空间中的bar函数设置断点,可以使用如下命令: (gdb) b (anonymous namespace

  • 问题内容: 现在IntelliJ 12.1已经发布,我希望能够将调试器附加到“渐变运行”应用程序,并使它在断点处停止。 并远程连接调试器,效果很好,但是在断点上都没有中断。我肯定错过了什么。 问题答案: 我可以通过配置任务进行远程调试。由于这是一个JavaExec任务,因此它支持jvmArgs属性: 和调试属性: 右键单击调试似乎无效,因为IntelliJ将调试器附加到错误的JVM(即gradle

  • 使用断点来暂停JavaScript代码,审查变量的值和在特定时刻所调用的堆栈。 一旦你设置了断点,你应该学习如何遍历你的代码,并审查你的变量和调用堆栈。 TL;DR 设置断点的最基本的方法是在特定的代码行上手动添加一个断点。您也可以将这些断点配置为仅在满足特定条件时触发。 您还可以设置在满足一般条件时触发的断点,例如事件,DOM更改或未捕获异常。 在代码特定行上设置断点 当您知道要审查的语句时,在

  • #include <stdio.h> int main(void) { int i = 0; int sum = 0; for (i = 1; i <= 200; i++) { sum += i; } printf("%d\n", sum); return