62,615
社区成员
发帖
与我相关
我的任务
分享
return this.getClass().getName().
substring(0, this.getClass().getName().lastIndexOf('$'));
return this.getClass().getName().substring(0, this.getClass().getName().lastIndexOf('$'));
public static void main(String[] args) {
int i
=3;
int j =
++i;
}
比如分析代码,提取出影响 j 值的代码。
显而易见i影响j,因此需要提取int i=3这条语句,但是我只能提取到语句的起始行,即只能提取到行号2,并不能取到行号3,导致提取后只有 int i 这一部分。
因此想着,如果能对这个程序预处理,合并到同一行中,就不存在只能提取一条语句的一部分的状况了。
[/quote]
看上去像是用了语义分析算法,这样是比较好办的,在建语法树的时候给每个节点绑一个它的行数,还原现场的时候带着就行了[/quote]
赞~这个方法应该是可行的。只是现在项目已经接近尾声,这样改动太大。因此还是想从对待测程序本身入手,将代码行合并。public static void main(String[] args) {
int i
=3;
int j =
++i;
}
比如分析代码,提取出影响 j 值的代码。
显而易见i影响j,因此需要提取int i=3这条语句,但是我只能提取到语句的起始行,即只能提取到行号2,并不能取到行号3,导致提取后只有 int i 这一部分。
因此想着,如果能对这个程序预处理,合并到同一行中,就不存在只能提取一条语句的一部分的状况了。
[/quote]
看上去像是用了语义分析算法,这样是比较好办的,在建语法树的时候给每个节点绑一个它的行数,还原现场的时候带着就行了public static void main(String[] args) {
int i
=3;
int j =
++i;
}
比如分析代码,提取出影响 j 值的代码。
显而易见i影响j,因此需要提取int i=3这条语句,但是我只能提取到语句的起始行,即只能提取到行号2,并不能取到行号3,导致提取后只有 int i 这一部分。
因此想着,如果能对这个程序预处理,合并到同一行中,就不存在只能提取一条语句的一部分的状况了。
public class Test {
public static void main(String[] args) {
throw
new
RuntimeException();
}
}
猜一下异常堆栈出现在第几行?
实际上是new这行。
所以java显然认为这是3行代码