Debugging - do not invoke getter when there is none - avoid freezing

This commit is contained in:
Jindra Petřík
2023-11-10 20:26:04 +01:00
parent 136b389fc1
commit 828db71e81
5 changed files with 10 additions and 7 deletions

View File

@@ -16,6 +16,7 @@ All notable changes to this project will be documented in this file.
- [#2116] Limit maximum number of box blur pixels
- [#2122] `-header` command did not support negative integers for displayrect
- AS3 direct editation - namespaces were initialized in class initializers
- Debugging - do not invoke getter when there is none - avoid freezing
## [20.0.0] - 2023-11-05

Binary file not shown.

View File

@@ -158,9 +158,9 @@ public class DebuggerHandler implements DebugConnectionListener {
return stackLines;
}
public InGetVariable getVariable(long parentId, String varName, boolean children) {
public InGetVariable getVariable(long parentId, String varName, boolean children, boolean useGetter) {
try {
return commands.getVariable(parentId, varName, true, children);
return commands.getVariable(parentId, varName, useGetter, children);
} catch (IOException ex) {
return null;
}
@@ -913,7 +913,7 @@ public class DebuggerHandler implements DebugConnectionListener {
}
public synchronized InCallFunction callMethod(String object, String methodName, List<Object> args) throws ActionScriptException {
InGetVariable igv = getVariable(0, object, false);
InGetVariable igv = getVariable(0, object, false, false);
return callMethod(igv.parent, methodName, args);
}

View File

@@ -301,7 +301,7 @@ public class Main {
if ((v.vType == VariableType.OBJECT || v.vType == VariableType.MOVIECLIP)) {
objectId = (Long) v.value;
}
Object oldPos = getDebugHandler().getVariable(objectId, "position", true).parent.value;
Object oldPos = getDebugHandler().getVariable(objectId, "position", true, true).parent.value;
getDebugHandler().setVariable(objectId, "position", VariableType.NUMBER, 0);
icf = getDebugHandler().callFunction(false, "readUTF", v, new ArrayList<>());
System.out.println("Result=" + icf.variables.get(0).value);

View File

@@ -350,15 +350,17 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener<Scr
if ("".equals(var.name)) {
return;
}
}
InGetVariable igv;
Long objectId = varToObjectId(varInsideGetter);
boolean useGetter = (var.flags & VariableFlags.HAS_GETTER) > 0;
if (parentObjectId == 0 && objectId != 0) {
igv = Main.getDebugHandler().getVariable(objectId, "", true);
igv = Main.getDebugHandler().getVariable(objectId, "", true, useGetter);
} else {
igv = Main.getDebugHandler().getVariable(parentObjectId, var.name, true);
igv = Main.getDebugHandler().getVariable(parentObjectId, var.name, true, useGetter);
}
//current var is getter function - set it to value really got