killme2008 / killme2008/aviatorscript

运行时发生异常的源码关联问题,即class中的LineNumberTable错乱的问题

Offen
#698 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
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

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.