killme2008 / killme2008/aviatorscript
运行时发生异常的源码关联问题,即class中的LineNumberTable错乱的问题
- Vorherrschende Sprache
- Java
- Sterne
- 5.2k
- Forks
- 906
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
使用脚本的时候 比如第三行发生了1/0的运行时异常 但是异常信息中显示的Aviatorscript_时间戳的那个生成的类的显示的错误行数目前是错误的,经过跟踪class的LineNumberTable发现 key是源码行号没问题 但是value的label 即currentLabel是错误的 ,然后目前的修改办法是
private void visitLineNumber(final Token token) {
if (token != null && token.getLineNo() > 0) {
this.mv.visitLineNumber(token.getLineNo(), this.currentLabel);
}
}
改成了
private void visitLineNumber(final Token token) {
if (token != null && token.getLineNo() > 0) {
// this.mv.visitLineNumber(token.getLineNo(), this.currentLabel);
// 确保每个指令都有正确的行号映射
Label lineLabel = new Label();
this.mv.visitLabel(lineLabel);
this.mv.visitLineNumber(token.getLineNo(), lineLabel);
this.currentLabel = lineLabel;
}
} ,试了是好用的 源代码行号正确了,作者大神看看有没有啥问题,看看要不要采纳下 @killme2008
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Rechercherichtung
Finde den Compiler-Code, der visitLineNumber enthält, und untersuche, wie currentLabel zugewiesen wird, bevor Bytecode-Instruktionen ausgegeben werden. Reproduziere das Problem mit einem Skript, dessen dritte Zeile 1/0 auswertet, und untersuche anschließend die LineNumberTable der generierten Klasse sowie die Zeile der Ausnahme. Erledigt ist die Aufgabe, wenn Laufzeitfehler die korrekte Quellzeile melden, ohne anderen generierten Bytecode zu beeinträchtigen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- java
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100