给定一个 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,但我想知道是否有一种更优雅的方法。
我不认为它会那样工作。尽管您可以先在
System.out
中收集这些行号,然后在末尾显示它们,但您肯定必须对执行的每一行使用 List
。
如果你真的想自动获取行号,你必须获取堆栈跟踪
Thread.currentThread().getStackTrace()[0].getLineNumber()
这将为您提供当前所在的行号(这显然是该确切语句的编号)。如果您愿意,也可以将其移至单独的函数,然后向上移动堆栈跟踪以获取行号。
但是你真的不应该这样做。获取堆栈跟踪是 Java 中最昂贵的操作之一。您确实不想对执行的每个语句都执行此操作,除非性能对您来说完全没有价值。