提问人:Luka Fürst 提问时间:11/13/2023 最后编辑:Mark RotteveelLuka Fürst 更新时间:11/14/2023 访问量:88
Java 程序的执行语句序列 [已关闭]
The sequence of executed statements of a Java program [closed]
问:
给定一个 Java 程序,我想运行它并确定执行语句的顺序。例如,在运行程序时
import java.util.Scanner;
public class Temp {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // line 4
int n = sc.nextInt();
int m = n;
if (n > 0) {
m = 2 * n;
} else {
m = 3 * n;
}
}
}
使用负整数作为输入,我想获得序列 4、5、6、7、10(可能没有 7),指的是执行的行。
当然,人们总是可以在源代码中的每个语句之后添加一个 System.out.println,但我想知道是否有更优雅的方法。
答:
1赞
geanakuch
11/13/2023
#1
我不认为它会那样工作。你肯定必须对执行的每一行都使用 a,尽管你可以先在 a 中收集这些行号,然后在最后显示它们。System.out
List
如果你真的打算自动获取行号,你必须抓取堆栈跟踪
Thread.currentThread().getStackTrace()[0].getLineNumber()
这将为您提供您当前所在的行号(这显然是该确切语句的编号)。如果需要,还可以将其移动到单独的函数中,然后向上移动堆栈跟踪以获取行号。
但是,你真的不应该那样做。抓取堆栈跟踪是 Java 中最昂贵的操作之一。你真的不想对你执行的每个语句都这样做,除非性能对你完全没有价值。
1赞
Honza Zidek
11/13/2023
#2
您可以通过代码覆盖率达到请求的效果。
- 从 JUnit 测试中调用代码。
- 将 IDE 中的代码作为“run test with coverage”运行。最有可能的是,您必须在IDE中安装一些“测试覆盖率”插件。
- 您将直接在 IDE 中看到所有标记为绿色的行。
例如,对于 IntelliJ IDEA,该插件称为“代码覆盖率”:
你像这样运行它:
然后,在 IDE 的 “coverage” 窗口中看到结果:
单击类名后,请注意左侧的绿色和红色“标记”:
评论