From 1237762e6094fbc8b28ca61de7460a2787b17878 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 21 Nov 2015 19:12:42 +0100 Subject: [PATCH] AS1/2 debugger debugger listening only when really debugging started fail to listen message break reason displayed --- .gitignore | 1 + lib/flashdebugger.jar | Bin 212928 -> 244165 bytes libsrc/ffdec_lib/nbproject/project.xml | 12 +- .../src/com/jpexs/decompiler/flash/SWF.java | 198 ++++++- .../decompiler/flash/SWFInputStream.java | 16 +- .../avm2/instructions/AVM2Instruction.java | 5 + .../jpexs/decompiler/flash/action/Action.java | 15 +- .../flash/action/ActionGraphSource.java | 6 +- .../flash/action/ActionListReader.java | 1 + .../flash/configuration/Configuration.java | 4 + .../flash/helpers/HighlightedTextWriter.java | 2 +- .../flash/tags/DefineButtonTag.java | 12 + .../decompiler/flash/tags/DoActionTag.java | 14 + .../flash/tags/DoInitActionTag.java | 14 + .../decompiler/flash/tags/base/ASMSource.java | 4 + .../flash/types/BUTTONCONDACTION.java | 12 + .../flash/types/CLIPACTIONRECORD.java | 12 + .../decompiler/graph/GraphSourceItem.java | 2 + libsrc/ffdec_lib/testdata/run_as2/run_as2.swf | Bin 0 -> 251521 bytes libsrc/ffdec_lib/testdata/run_as3/run.swf | Bin 1216 -> 1867 bytes .../flash/gui/{abc => }/DebugPanel.java | 65 ++- .../decompiler/flash/gui/DebuggerHandler.java | 528 +++++++++++++----- src/com/jpexs/decompiler/flash/gui/Main.java | 374 ++++++++++--- .../decompiler/flash/gui/MainFrameMenu.java | 235 +------- .../flash/gui/MainFrameRibbonMenu.java | 34 +- .../jpexs/decompiler/flash/gui/MainPanel.java | 40 +- .../decompiler/flash/gui/abc/ABCPanel.java | 1 + .../flash/gui/abc/DecompiledEditorPane.java | 68 +-- .../flash/gui/action/ActionPanel.java | 188 +++++-- .../gui/editor/DebuggableEditorPane.java | 102 ++++ .../flash/gui/locales/MainFrame.properties | 15 +- .../decompiler/flash/gui/FlashPlayerTest.java | 1 + 32 files changed, 1355 insertions(+), 626 deletions(-) create mode 100644 libsrc/ffdec_lib/testdata/run_as2/run_as2.swf rename src/com/jpexs/decompiler/flash/gui/{abc => }/DebugPanel.java (87%) create mode 100644 src/com/jpexs/decompiler/flash/gui/editor/DebuggableEditorPane.java diff --git a/.gitignore b/.gitignore index 35c466825..613ec67bd 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ *.conflict~ *.identcache *.recompiled.swf +run_test_*.swf Thumbs.db /build/ /reports/ diff --git a/lib/flashdebugger.jar b/lib/flashdebugger.jar index 7c75988c35f21b8559d81411fb6a3c4728d6656e..9290063102909cecc450be566a004253c9dbcde3 100644 GIT binary patch delta 40983 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

bST%k- z{iA=p;0`C~ihsQ;@AyS1eU$ZLad3QQpycJhQc+r_BSoT`nTgO9udC42!O$%nTKA?3 z{ca5^@Jgm#Y-oxIU8VORbpOc`{T-9DSW_A>|JlKBqWSp8MvmYgB#@PphqjVa%Lg_J z!@9k{-84Vzk3zM-GLRB8aF5rDDz{Nj%|cAf7c$2B_yXaxTC?m-0gf8|4~eOH_HAD4 zVK(1%1_u0_-mBeU8sZvro?PqmL3Vwv83=Gc9}tR) zvJN~1?A{va@JmvdnRBe@ZIA)~dh@^xYh|HhkVL_nm}?W{(p-S6DNuMH|Eb#wbPJcY zJJ`5KIl8zs811q2$3;KO2Xc@@H#}qSOLymvR2cFcURGB2mc0auu2=lLZ`Zv#)>3MWo54p5xs}WL9=Gk%Oe>uk>J^y;+bp2M9XXSpMRf8(Z z#k6!$9k#2 z)_}u?n7)OsxtY@!S`%_L?NSe;Q7hkpM45{@h6;Znk@I;LX>OVrON$mI4l#N z6>Dzm))Kpc!gig$y4tjdR3^6cNUcS}yPyd0#yp~;VC#vo7W-}9@D8HH*H-ChU<_N2 zFSd_zW=$G~yqh0adFRbQKZW>lZTfrLZ$%&RuQ%T)J7(3DK%@D5m?KqUU=#yN?lUU% zhq+q3)Xik~-4^rS&6$9}zutoAU(c!ZFV$+Eu#|k8K{damqVh{@RruPSPd@fv7)<=@ zJx1sMijyiuMMbz1UR8fmdZ9SotLr1@>LfJwkN4UiM zuS4#Ar4}^Azv^CG_`wfD>C>$7Wsd)6Lg4nEOYrj})BhO*+k08>AfY+S2-=*f{=pE^ z0IV87*dE0wv5yd?Z>yQaz-1`dtqR6KSAG5rkvdg}CDs~2Di(Z$sL*R+k_OjdV9h^4 zQkj1sQoxZiV8vnr4TC5Xpp@u;h}4@-ChqBLVN!d5Qq0E~nWta$2Od)d8!Z!31T`g= zZOkv~0XiLool%@WnFXo=dB{==P zDYFn*gJ`qNO;KPX0bvgm4Zea14Zu=!9+NOqB>@^Usxkw*{)8B^D&T#*tkch$LCwCY zd}Bf<&|DBk?fop4LDpqp4y*)0CVHC#O>9+y$^pmnfXyUxU@(H@)`8@#RGFu5v|`qs zo?yYuGX1YPvnbdTiVIxtJOrju5Jrva4cZ6|@?f>G7k;lP1cnX>gO>lmz>>yy22izj zdx4Pz?v#Nnero}=c$XDaF5m=4I3!pC6=*s@6?`}i41x{7Rt4C$v-V|;)*$Z#F=`HS zbcJdVu!8zt+X`sTB`>J(-5bDsQ3vdqfXzu0*`jb0=sOTbEfw|#f;G5-1L+sYh__)- zBaS}=7A&Be4lI{w4V24`fy%A1W|rarde42$k?yzC51KHGF^eZNPoMaKNpHHS4OH%G z)*6QC4Z1+NC#hgLi|HLU(3IARS!fXJyYU0gjxU jEEx}2w-Gfc80(;F=h`!i@=XCQU-$-01v?vn^*jRrf-lLM delta 20475 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 clean build - + debug-nb @@ -137,7 +137,7 @@ auxiliary.show.customizer.message= - + @@ -147,7 +147,7 @@ auxiliary.show.customizer.message= test \.java$ java-name - + @@ -181,7 +181,7 @@ auxiliary.show.customizer.message= - + folder @@ -219,7 +219,7 @@ auxiliary.show.customizer.message= nbproject/ide-file-targets.xml - + @@ -236,7 +236,7 @@ auxiliary.show.customizer.message= src - ../../lib/LZMA.jar;../../lib/avi.jar;../../lib/gif.jar;../../lib/gnujpdf.jar;../../lib/jl1.0.1.jar;../../lib/jpacker.jar;../../lib/nellymoser.jar;../../lib/sfntly.jar;../../lib/ttf.jar;../../lib/cmykjpeg.jar;../../src + ../../lib/LZMA.jar;../../lib/avi.jar;../../lib/gif.jar;../../lib/gnujpdf.jar;../../lib/jl1.0.1.jar;../../lib/jpacker.jar;../../lib/nellymoser.jar;../../lib/sfntly.jar;../../lib/ttf.jar;../../lib/cmykjpeg.jar;../../src;../../lib/flashdebugger.jar build reports dist diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index 2797cdd27..b79a64927 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash; import SevenZip.Compression.LZMA.Decoder; import SevenZip.Compression.LZMA.Encoder; +import com.jpexs.debugger.flash.SWD; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.CachedDecompilation; import com.jpexs.decompiler.flash.abc.ClassPath; @@ -77,6 +78,7 @@ import com.jpexs.decompiler.flash.helpers.SWFDecompilerPlugin; import com.jpexs.decompiler.flash.helpers.collections.MyEntry; import com.jpexs.decompiler.flash.helpers.hilight.Highlighting; import com.jpexs.decompiler.flash.tags.ABCContainerTag; +import com.jpexs.decompiler.flash.tags.DebugIDTag; import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag; import com.jpexs.decompiler.flash.tags.DefineSpriteTag; import com.jpexs.decompiler.flash.tags.DoInitActionTag; @@ -157,6 +159,7 @@ import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -171,10 +174,15 @@ import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Random; import java.util.Set; import java.util.Stack; +import java.util.TreeMap; +import java.util.TreeSet; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.zip.DeflaterOutputStream; import java.util.zip.InflaterInputStream; @@ -1094,12 +1102,7 @@ public final class SWF implements SWFContainerItem, Timelined { } } - /*preload shape tags - for (Tag tag : tags) { - if (tag instanceof ShapeTag) { - ((ShapeTag) tag).getShapes(); - } - }*/ + getASMs(true); // Add scriptNames to ASMs } @Override @@ -1473,11 +1476,14 @@ public final class SWF implements SWFContainerItem, Timelined { TreeItem realItem = treeItem instanceof TagScript ? ((TagScript) treeItem).getTag() : treeItem; if (realItem instanceof ASMSource && (exportAll || exportNode)) { String npath = path; + String exPath = path; int ppos = 1; while (asmsToExport.containsKey(npath)) { ppos++; npath = path + (exportFileNames ? "[" + ppos + "]" : "_" + ppos); + exPath = path + "[" + ppos + "]"; } + ((ASMSource) realItem).setScriptName(exPath); asmsToExport.put(npath, (ASMSource) realItem); } @@ -3143,6 +3149,8 @@ public final class SWF implements SWFContainerItem, Timelined { int pos = 0; + boolean hasEnabled = false; + for (int i = 0; i < tags.size(); i++) { Tag t = tags.get(i); if (t instanceof MetadataTag) { @@ -3152,23 +3160,183 @@ public final class SWF implements SWFContainerItem, Timelined { pos = i + 1; } if (version >= 6 && (t instanceof EnableDebugger2Tag)) { - return; + hasEnabled = true; + break; } if (version == 5 && (t instanceof EnableDebuggerTag)) { - return; + hasEnabled = true; + break; } if (version < 5 && (t instanceof ProtectTag)) { - return; + hasEnabled = true; + break; } } - if (version >= 6) { - tags.add(pos, new EnableDebugger2Tag(this)); - } else if (version == 5) { - tags.add(pos, new EnableDebuggerTag(this)); - } else { - tags.add(pos, new ProtectTag(this)); + if (!hasEnabled) { + if (version >= 6) { + tags.add(pos, new EnableDebugger2Tag(this)); + } else if (version == 5) { + tags.add(pos, new EnableDebuggerTag(this)); + } else { + tags.add(pos, new ProtectTag(this)); + } } + + addDebugId(); + } + + public DebugIDTag getDebugId() { + for (Tag t : tags) { + if (t instanceof DebugIDTag) { + return (DebugIDTag) t; + } + } + return null; + } + + public DebugIDTag addDebugId() { + DebugIDTag r = getDebugId(); + if (r == null) { + for (int i = 0; i < tags.size(); i++) { + Tag t = tags.get(i); + if ((t instanceof EnableDebuggerTag) || (t instanceof EnableDebugger2Tag)) { + r = new DebugIDTag(this); + tags.add(i + 1, r); + new Random().nextBytes(r.debugId); + break; + } + } + } + return r; + } + + public boolean generateSwdFile(File file, Map> breakpoints) throws IOException { + DebugIDTag dit = getDebugId(); + if (dit == null) { + return false; + } + List items = new ArrayList<>(); + Map asms = getASMs(true); + + try { + items.add(new SWD.DebugId(dit.debugId)); + Random rnd = new Random(); + + //Map moduleIds = new HashMap<>(); + List swdOffsets = new ArrayList<>(); + List swfBps = new ArrayList<>(); + int moduleId = 0; + List names = new ArrayList<>(asms.keySet()); + Collections.sort(names); + //Collections.reverse(names); + for (String name : names) { + moduleId++; + CachedScript cs; + try { + cs = SWF.getCached(asms.get(name), asms.get(name).getActions()); + } catch (InterruptedException ex) { + return false; + } + String txt = cs.text.replace("\r", ""); + int line = 1; + Map lineToOffset = new HashMap<>(); + Map regNames = new HashMap<>(); + + for (int pos = 0; pos < txt.length(); pos++) { + Highlighting h = Highlighting.searchPos(cs.hilights, pos); + if (h != null) { + + int firstLineOffset = (int) h.getProperties().firstLineOffset; + if (firstLineOffset != -1) { + if (h.getProperties().declaration && h.getProperties().regIndex > -1) { + regNames.put(h.getProperties().regIndex, h.getProperties().localName); + + /*List curRegIndexes = new ArrayList<>(regNames.keySet()); + List curRegNames = new ArrayList<>(); + for (int i = 0; i < curRegIndexes.size(); i++) { + curRegNames.add(regNames.get(i)); + } + items.add(new SWD.DebugRegisters((int) h.getProperties().firstLineOffset, curRegIndexes, curRegNames));*/ + } + } + if (firstLineOffset != -1 && !lineToOffset.containsKey(line)) { + lineToOffset.put(line, firstLineOffset); + } + } + if (txt.charAt(pos) == '\n') { + line++; + } + } + + Map offSetToLine = new TreeMap<>(); + for (Map.Entry en : lineToOffset.entrySet()) { + offSetToLine.put(en.getValue(), en.getKey()); + } + + //final String NONAME = "[No instance name assigned]"; + String sname = name; + int bitmap = SWD.bitmapAction; + /* Matcher m; + int bitmap = SWD.bitmapAction; + m = Pattern.compile("^\\\\frame_([0-9]+)\\\\DoAction$").matcher(sname); + if (m.matches()) { + //TODO: scenes?, layers? + sname = "Actions for Scene 1: Frame " + m.group(1) + " of Layer Name Layer 1"; + } else if ((m = Pattern.compile("^\\\\__Packages\\\\(.*)$").matcher(sname)).matches()) { + sname = m.group(1).replace("\\", ".") + ": .\\" + m.group(1) + ".as"; + } else { + continue; //FIXME! + } + m = Pattern.compile("^\\\\DefineSprite_([0-9])+\\\\frame_([0-9]+)\\\\DoAction$").matcher(sname); + if (m.matches()) { + //TODO: layers? + //sname = "Actions for Symbol " + m.group(1) + ": Frame " + m.group(2) + " of Layer Name Layer 1"; + continue; //FIXME! + } + + //TODO: handle onxxx together ? + m = Pattern.compile("^\\\\DefineButton2?_([0-9]+)\\\\on\\(.*$").matcher(sname); + if (m.matches()) { + //bitmap = SWD.bitmapOnAction; + //sname = "Actions for " + NONAME + " (Symbol " + m.group(1) + ")"; + continue; //FIXME! + } + + //TODO: handle onClipEvent together ? + m = Pattern.compile("^\\\\frame_([0-9]+)\\\\PlaceObject[2-3]?_([0-9]+)_[^\\\\]*\\\\onClipEvent\\(.*$").matcher(sname); + if (m.matches()) { + //bitmap = SWD.bitmapOnClipAction; + //sname = "Actions for " + NONAME + " (Symbol " + m.group(2) + ")"; + continue; //FIXME! + }//*/ + + items.add(new SWD.DebugScript(moduleId, bitmap, sname, txt)); + for (int ofs : offSetToLine.keySet()) { + items.add(new SWD.DebugOffset(moduleId, offSetToLine.get(ofs), ofs)); + } + if (breakpoints.containsKey(name)) { + Set bplines = breakpoints.get(name); + for (int bpline : bplines) { + if (lineToOffset.containsKey(bpline)) { + items.add(new SWD.DebugBreakpoint(moduleId, bpline)); + } + } + } + //moduleId++; + } + //items.addAll(swdOffsets); + //items.addAll(swfBps); + + } catch (Throwable t) { + Logger.getLogger(SWF.class.getName()).log(Level.SEVERE, "message", t); + return false; + } + SWD swd = new SWD(7, items); + try (FileOutputStream fis = new FileOutputStream(file)) { + swd.saveTo(fis); + } + return true; } public boolean enableTelemetry(String password) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java index 04e61554a..3a937aeb6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFInputStream.java @@ -897,7 +897,7 @@ public class SWFInputStream implements AutoCloseable { InflaterInputStream dis = new InflaterInputStream(new ByteArrayInputStream(data, offset, length)); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buf = new byte[4096]; - int c = 0; + int c; while ((c = dis.read(buf)) > 0) { baos.write(buf, 0, c); } @@ -1202,11 +1202,7 @@ public class SWFInputStream implements AutoCloseable { break; case DoActionTag.ID: case DoInitActionTag.ID: - if (isAS3) { - doParse = false; - } else { - doParse = true; - } + doParse = !isAS3; break; case ShowFrameTag.ID: case PlaceObjectTag.ID: @@ -1233,7 +1229,7 @@ public class SWFInputStream implements AutoCloseable { } } - if (parseTags && doParse && parallel1 && tag instanceof TagStub) { + if (parseTags && doParse && parallel1 && tag instanceof TagStub && executor != null) { Future future = executor.submit(new TagResolutionTask((TagStub) tag, di, level, parallel1, skipUnusualTags, lazy)); futureResults.add(future); } else { @@ -1262,7 +1258,9 @@ public class SWFInputStream implements AutoCloseable { } } - executor.shutdown(); + if (executor != null) { + executor.shutdown(); + } } return tags; } @@ -1670,7 +1668,7 @@ public class SWFInputStream implements AutoCloseable { * @throws IOException */ public Action readAction() throws IOException { - int actionCode = -1; + int actionCode; try { actionCode = readUI8("actionCode"); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java index 785a68386..36a84714d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java @@ -61,6 +61,11 @@ public class AVM2Instruction implements Cloneable, GraphSourceItem { private String file; + @Override + public long getLineOffset() { + return getOffset(); + } + public void setFileLine(String file, int line) { this.file = file; this.line = line; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java index b87cd8a81..30aed124c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.BaseLocalData; import com.jpexs.decompiler.flash.DisassemblyListener; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SWFOutputStream; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.Reference; import com.jpexs.decompiler.flash.action.deobfuscation.ActionDeobfuscator; import com.jpexs.decompiler.flash.action.model.ActionItem; import com.jpexs.decompiler.flash.action.model.ConstantPool; @@ -109,6 +110,8 @@ public abstract class Action implements GraphSourceItem { private boolean ignored = false; + public long fileOffset = -1; + /** * Action type identifier */ @@ -121,6 +124,11 @@ public abstract class Action implements GraphSourceItem { private long address; + @Override + public long getLineOffset() { + return fileOffset; + } + /** * Names of ActionScript properties */ @@ -937,11 +945,12 @@ public abstract class Action implements GraphSourceItem { this.ignored = ignored; } - public static List actionsPartToTree(HashMap registerNames, HashMap variables, HashMap functions, TranslateStack stack, List actions, int start, int end, int version, int staticOperation, String path) throws InterruptedException { + public static List actionsPartToTree(Reference fi, HashMap registerNames, HashMap variables, HashMap functions, TranslateStack stack, List actions, int start, int end, int version, int staticOperation, String path) throws InterruptedException { if (start < actions.size() && (end > 0) && (start > 0)) { logger.log(Level.FINE, "Entering {0}-{1}{2}", new Object[]{start, end, actions.size() > 0 ? (" (" + actions.get(start).toString() + " - " + actions.get(end == actions.size() ? end - 1 : end) + ")") : ""}); } ActionLocalData localData = new ActionLocalData(registerNames, variables, functions); + localData.lineStartAction = fi.getVal(); List output = new ArrayList<>(); int ip = start; boolean isWhile = false; @@ -964,6 +973,10 @@ public abstract class Action implements GraphSourceItem { ip++; continue; } + if (stack.isEmpty()) { + localData.lineStartAction = action; + fi.setVal(action); + } if (action instanceof GraphSourceItemContainer) { GraphSourceItemContainer cnt = (GraphSourceItemContainer) action; //List out=actionsPartToTree(new HashMap(), new HashMap(),new HashMap(), new TranslateStack(), src, ip+1,endip-1 , version); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraphSource.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraphSource.java index 6736501de..70f0fe180 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraphSource.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionGraphSource.java @@ -79,7 +79,11 @@ public class ActionGraphSource extends GraphSource { @Override public List translatePart(GraphPart part, BaseLocalData localData, TranslateStack stack, int start, int end, int staticOperation, String path) throws InterruptedException { - return Action.actionsPartToTree(registerNames, variables, functions, stack, actions, start, end, version, staticOperation, path); + Reference fi = new Reference<>(localData.lineStartInstruction); + + List r = Action.actionsPartToTree(fi, registerNames, variables, functions, stack, actions, start, end, version, staticOperation, path); + localData.lineStartInstruction = fi.getVal(); + return r; } private List posCache = null; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionListReader.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionListReader.java index 09477c455..0dabf6967 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionListReader.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/ActionListReader.java @@ -796,6 +796,7 @@ public class ActionListReader { if ((a = sis.readAction()) == null) { break; } + a.fileOffset = ip; int actionLengthWithHeader = a.getTotalActionLength(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java index 3b095a479..260d37d76 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java @@ -524,6 +524,10 @@ public class Configuration { @ConfigurationName("gui.avm2.splitPane.vars.dividerLocationPercent") public static final ConfigurationItem guiAvm2VarsSplitPaneDividerLocationPercent = null; + @ConfigurationDefaultDouble(0.7) + @ConfigurationName("gui.action.splitPane.vars.dividerLocationPercent") + public static final ConfigurationItem guiActionVarsSplitPaneDividerLocationPercent = null; + @ConfigurationDefaultBoolean(true) @ConfigurationCategory("script") public static final ConfigurationItem debugHalt = null; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedTextWriter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedTextWriter.java index f323423ff..3c095c8c4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedTextWriter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedTextWriter.java @@ -184,7 +184,7 @@ public class HighlightedTextWriter extends GraphTextWriter { ndata.merge(data); ndata.offset = src.getOffset() + pos; if (itemPos.startLineItem != null) { - ndata.firstLineOffset = itemPos.startLineItem.getOffset(); + ndata.firstLineOffset = itemPos.startLineItem.getLineOffset(); } h = new Highlighting(sb.length() - newLineCount, ndata, HighlightType.OFFSET, str); instructionHilights.add(h); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonTag.java index 7614aa493..696baf0ed 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineButtonTag.java @@ -84,6 +84,13 @@ public class DefineButtonTag extends ButtonTag implements ASMSource { private boolean isSingleFrame; + private String scriptName = "-"; + + @Override + public String getScriptName() { + return scriptName; + } + /** * Constructor * @@ -108,6 +115,11 @@ public class DefineButtonTag extends ButtonTag implements ASMSource { readData(sis, data, 0, false, false, false); } + @Override + public void setScriptName(String scriptName) { + this.scriptName = scriptName; + } + @Override public final void readData(SWFInputStream sis, ByteArrayRange data, int level, boolean parallel, boolean skipUnusualTags, boolean lazy) throws IOException { buttonId = sis.readUI16("buttonId"); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoActionTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoActionTag.java index 016b4ba0a..81d746019 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoActionTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoActionTag.java @@ -27,6 +27,7 @@ import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.tags.base.ASMSource; import com.jpexs.decompiler.flash.types.annotations.HideInRawEdit; +import com.jpexs.decompiler.flash.types.annotations.Internal; import com.jpexs.decompiler.flash.types.annotations.SWFVersion; import com.jpexs.helpers.ByteArrayRange; import com.jpexs.helpers.Helper; @@ -54,6 +55,14 @@ public class DoActionTag extends Tag implements ASMSource { @HideInRawEdit public ByteArrayRange actionBytes; + @Internal + private String scriptName = "-"; + + @Override + public String getScriptName() { + return scriptName; + } + /** * Constructor * @@ -87,6 +96,11 @@ public class DoActionTag extends Tag implements ASMSource { readData(sis, data, 0, false, false, false); } + @Override + public void setScriptName(String scriptName) { + this.scriptName = scriptName; + } + @Override public final void readData(SWFInputStream sis, ByteArrayRange data, int level, boolean parallel, boolean skipUnusualTags, boolean lazy) throws IOException { actionBytes = sis.readByteRangeEx(sis.available(), "actionBytes"); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java index 306070656..488529b56 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DoInitActionTag.java @@ -29,6 +29,7 @@ import com.jpexs.decompiler.flash.tags.base.ASMSource; import com.jpexs.decompiler.flash.tags.base.CharacterIdTag; import com.jpexs.decompiler.flash.types.BasicType; import com.jpexs.decompiler.flash.types.annotations.HideInRawEdit; +import com.jpexs.decompiler.flash.types.annotations.Internal; import com.jpexs.decompiler.flash.types.annotations.SWFType; import com.jpexs.decompiler.flash.types.annotations.SWFVersion; import com.jpexs.helpers.ByteArrayRange; @@ -61,6 +62,14 @@ public class DoInitActionTag extends Tag implements CharacterIdTag, ASMSource { @HideInRawEdit public ByteArrayRange actionBytes; + @Internal + private String scriptName = "-"; + + @Override + public String getScriptName() { + return scriptName; + } + /** * Constructor * @@ -71,6 +80,11 @@ public class DoInitActionTag extends Tag implements CharacterIdTag, ASMSource { actionBytes = ByteArrayRange.EMPTY; } + @Override + public void setScriptName(String scriptName) { + this.scriptName = scriptName; + } + /** * Constructor * diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ASMSource.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ASMSource.java index 13bacc8b7..555aab836 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ASMSource.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ASMSource.java @@ -91,4 +91,8 @@ public interface ASMSource extends Exportable { public Tag getSourceTag(); public void setSourceTag(Tag t); + + public String getScriptName(); + + public void setScriptName(String scriptName); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java index 18088e6c9..02d1caa71 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/BUTTONCONDACTION.java @@ -47,6 +47,13 @@ public class BUTTONCONDACTION implements ASMSource, Serializable { private Tag tag; + private String scriptName = "-"; + + @Override + public String getScriptName() { + return scriptName; + } + // Constructor for Generic tag editor. public BUTTONCONDACTION() { swf = null; @@ -54,6 +61,11 @@ public class BUTTONCONDACTION implements ASMSource, Serializable { actionBytes = new ByteArrayRange(SWFInputStream.BYTE_ARRAY_EMPTY); } + @Override + public void setScriptName(String scriptName) { + this.scriptName = scriptName; + } + public BUTTONCONDACTION(SWF swf, SWFInputStream sis, Tag tag) throws IOException { this.swf = swf; this.tag = tag; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java index 8bbddace8..af7f093cc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/CLIPACTIONRECORD.java @@ -42,6 +42,13 @@ import java.util.List; */ public class CLIPACTIONRECORD implements ASMSource, Serializable { + private String scriptName = "-"; + + @Override + public String getScriptName() { + return scriptName; + } + public static String keyToString(int key) { if ((key < CLIPACTIONRECORD.KEYNAMES.length) && (key > 0) && (CLIPACTIONRECORD.KEYNAMES[key] != null)) { return CLIPACTIONRECORD.KEYNAMES[key]; @@ -100,6 +107,11 @@ public class CLIPACTIONRECORD implements ASMSource, Serializable { actionBytes = ByteArrayRange.EMPTY; } + @Override + public void setScriptName(String scriptName) { + this.scriptName = scriptName; + } + public CLIPACTIONRECORD(SWF swf, SWFInputStream sis, Tag tag) throws IOException { this.swf = swf; this.tag = tag; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphSourceItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphSourceItem.java index eb22fd127..7436dfb8c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphSourceItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphSourceItem.java @@ -37,6 +37,8 @@ public interface GraphSourceItem extends Serializable, Cloneable { public long getOffset(); + public long getLineOffset(); + public boolean ignoredLoops(); public List getBranches(GraphSource code); diff --git a/libsrc/ffdec_lib/testdata/run_as2/run_as2.swf b/libsrc/ffdec_lib/testdata/run_as2/run_as2.swf new file mode 100644 index 0000000000000000000000000000000000000000..38b3016c55a7fe9235948f677f891efa4c61c9ec GIT binary patch literal 251521 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 JzY>9n`8V}Y7B2t* literal 0 HcmV?d00001 diff --git a/libsrc/ffdec_lib/testdata/run_as3/run.swf b/libsrc/ffdec_lib/testdata/run_as3/run.swf index 4dfc98abd776cfaa3f4d231d2d8697c52aa230f2..c0c7e713d188ea0e4d1c3603a2efe654e03206e7 100644 GIT binary patch literal 1867 zcmV-R2ekM@S5ptm3;+OloTXMvQybY8zPBH`YCU+Ghr!IWW&9YB)Gc8^QUDwD7~>4X z6p)H*swnHK`wDg3>Q;5PK&*zEUy#jIWyv!C!pmflg$yo6#W=fE7ot7j{Y&xzjW)w?KERiH7I3 z3W{=cbd)|?NZZbVlF8@uikelj*%Z}CxyP1=J1NV3kXVy_gc5Nz$7p$mZOLqpYj)dP zO(c4-oo4G2)^gKWw`(M=*-fQ`TS_LaDh!7z6^ahQp6%?}wz;;>wB(A3-G=;?W7mo6 zQh032#oZ-2CD+=9smqHC%PY!F%WGJqME}>aYGyH|E~V6ky-dE4%@-Dz=GAOLRj=6w znt|yS@vx3Pd}W-;q%!%v%yQvruCS1wS2LH!AL;hYZQZCJ|03fnO?gGR!Q?OFR@W}6 zZM7ZK&zG(##3W5(c`l_lEz{6215`RGw_$5-pSzSA&VeKQZm2+5Zns{}DpIOw1Kex0kfiYl3Ss zC~_AU7jMU+v_V3!s}YOH82~OuCj0{d4(%CD;>ur=BYDSeVv9A>5#AR*|3=Ev1qTj( zeD;?gr9b~80l_~3sQ>K(1kV%NZd)=ojRR{nVUoI+SX)tAYvAoj%(wdr^q;q(VLCp7 z^zh!_|MdE_dAvtD9(a4_hY<5bpCOP2+{wwm5C9t>wCg#BbrADk;50d8?|o#;Zo8z+ z*8EP}3T@Z^Kr}Dvw5@*C$4Q51ZI93f*0A-MM_jKjLeydl8&*6()D5>~;$vycJ~T+t zG+Ln`phzJ0=u%?)ia|_W3S=90$A_%6EsfC}*J#gq^M&Dhlv9VNag6r-?|QTqX+abb zW)d9S?=^(0Zm_<)pk!5bNnx$uGb}`_ylr}gkj#p{03)HY06Sj8~S zu>Mdv!!h=dQZ zVd9!e!u@PS+4Zn#*0A=bS2FG~g=wP(m<*gcyQx6dFWm2!)4Hcm%;w1n(d?HVqM+M&WxXJR^x5g7*~tWG~`vn;Q>zCE|EN;sN4C+B8BC(2IdkSdv5#5h4IYL5vM?2%-a!uKB@X z9u5r)-0-l-OMnYQUI0`a79bp;E_s3Ps-OGLDQ;KoZh(piUifYV>Fcig`?>cjf%m^{ zas<9>LISJ&+y??pSRXlG2VtHHk`r{#ohBzw+5FvU^6u%2p=kiR>Y4gAnENoN&NpFl zif|_MWiw%3egTK`t6-G7Lp_5rb~&C!Aa>Q{81*jjP!R9X%_rTYR0+Y;{h{PoWeA>9 znMlO+fhzb2R+H zuDU;771XNm3d}TkdMrUGMFNH+Vki>*0DXh*e)MG&G-BO)ED7-hogV&?$CGq^gzxT8 z(Rq6c?oYp*1}D?szpLL%!R;AH=UFf}tIyuu{zRag?N5OZa}s@jmYl;A`|?W}oX8)} zlSzF4{2fI&KVvY7mkDr^nA3!F{GdjMSvEXm!=sw;@UIX*t_ia`eo_;vT>Z0dePDZz z+n=fl)V4ZbPma*4s?H}1-FkdG#dRxj@U13x>yesBU8a+xHE}!5(fdVtJ~~ulY56`# zi(f01K|oi2g}`18;CD0ulPm%6SOVT(FAqvQ_c@F`o(H3FjD3${JRgZpP|}#+_mr5k z!0TDyG)`%k9(Pp&810H$Rn=-nt!CA#tX3uZ_X^GgPa{m#pN+;q@R{pW{x|!6 FdWKPBk=y_P literal 1216 zcmV;x1V8&jS5pz|2mkpXp4xk}x3&Nz-&kT7UcLoHO5^y?6-3 zp8=SB4!}GFwdr{Pz^}7YA^;nn(b4v5b$QscY+vJ}M~mGca5Y643n7I6l%=ZJ<|UZTIJ*UHbpUYEAuI{hOIl0|8EkiDs z);5%PnU}O!jlY{kwNTEft2woFP^f6didJ6zS}kg-dWjn&V`_s1)Sv;qf?O_Xh4N+c zTiA2DW0;+jPa?lT${Wf%PJWuVhJInK+xM(!y$oGp7V9xP@VUK($X-L&I*!+)!6tQG z%hYKos0?#{*U_I1=rPN6LaR5FH^9#=iO;Oj`1peNdde8>2YamZakPJM;xc8A`A*-{ z8HX>OZXv7P0xI4@-2IXs#>b9uWeP(?)?Pw)#8f_D%oEhz4Hsmqd2J?eH%-Iv;odr>znD`|Li zuoqUrY$HsN?ZfTrPY2tHeb+MsHshN;*J6+RLEzYN3fr{D()*Y4r0?zr{DzX8W9G$? z;SB63N_Wj5tS1`4Av_VQPj;$5O!3MhC&q;nz9IWopiM^E8aIIkdY5^bTI@&c)%1=X zFpug1U#>Wled~MG;r}}(my@zEE6n38nNNryo4O$&h`t~Y5rhd62}%&0BngR-36e|` zl#wtbXp*2Qf~N_ZA!wGMIfAYee1o8y1m7a)HbHj?S|I2yLH7uf2^U0*1TGVNpWrVE zevkwoXfWOxydfk=0zd$Zk_beU0Dyob1PK78X#rw@1c)$CLX06y0tf{xjMVSAL>P)A zb>-UkTm?cbCPwOL2k=jPZcvyUsYj`nptgiVu+T+3%>|@XOcq5kHSruqgwYY%C7_!a zbrLHAoj6MKpqYk8ncWOH&HVAQb1es(laT)|gNMt;^3CQH=7Z)mh=`};&sQs1&YRht z0jD#6ovqB%*|V2i;p|l?Gq*bjPUjx#_>5j}^DY~9H^Oedjqm>s>CHA?Ht4N3Zo$s& zQ775FgO1W|%(=YKgn&{LQ@l=I+)@kGCGeb1@I2vDlpc&!2Er*WsI9wd>z>+@)z*yK e68Uoo7vk2%9RAI08pNmZ{A_`5dHfH{K7-VX{b48o diff --git a/src/com/jpexs/decompiler/flash/gui/abc/DebugPanel.java b/src/com/jpexs/decompiler/flash/gui/DebugPanel.java similarity index 87% rename from src/com/jpexs/decompiler/flash/gui/abc/DebugPanel.java rename to src/com/jpexs/decompiler/flash/gui/DebugPanel.java index d18a8ba53..3f9d334c0 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/DebugPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/DebugPanel.java @@ -14,17 +14,18 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.jpexs.decompiler.flash.gui.abc; +package com.jpexs.decompiler.flash.gui; import com.jpexs.debugger.flash.Variable; import com.jpexs.debugger.flash.messages.in.InBreakAtExt; import com.jpexs.debugger.flash.messages.in.InFrame; import com.jpexs.decompiler.flash.gui.AppStrings; import com.jpexs.decompiler.flash.gui.DebuggerHandler; -import com.jpexs.decompiler.flash.gui.DebuggerHandler.VariableChangedListener; +import com.jpexs.decompiler.flash.gui.DebuggerHandler.BreakListener; import com.jpexs.decompiler.flash.gui.HeaderLabel; import com.jpexs.decompiler.flash.gui.Main; import com.jpexs.decompiler.flash.gui.View; +import com.jpexs.decompiler.flash.gui.abc.ABCPanel; import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; @@ -55,16 +56,25 @@ public class DebugPanel extends JPanel { private JTable callStackTable; private JTable stackTable; private JTabbedPane varTabs; - private VariableChangedListener listener; + private BreakListener listener; private JTextArea traceLogTextarea; private int logLength = 0; private List tabTypes = new ArrayList<>(); + private boolean loading = false; public static enum SelectedTab { LOG, STACK, SCOPECHAIN, LOCALS, REGISTERS, CALLSTACK } + public synchronized boolean isLoading() { + return loading; + } + + public synchronized void setLoading(boolean loading) { + this.loading = loading; + } + private SelectedTab selectedTab = null; public DebugPanel() { @@ -101,11 +111,30 @@ public class DebugPanel extends JPanel { } }); - Main.getDebugHandler().addVariableChangedListener(listener = new DebuggerHandler.VariableChangedListener() { + Main.getDebugHandler().addBreakListener(listener = new DebuggerHandler.BreakListener() { @Override - public void variablesChanged() { - refresh(); + public void doContinue() { + View.execInEventDispatch(new Runnable() { + + @Override + public void run() { + refresh(); + } + + }); + } + + @Override + public void breakAt(String scriptName, int line) { + View.execInEventDispatch(new Runnable() { + + @Override + public void run() { + refresh(); + } + }); + } }); @@ -115,6 +144,9 @@ public class DebugPanel extends JPanel { @Override public void stateChanged(ChangeEvent e) { if (e.getSource() == varTabs) { + if (isLoading()) { + return; + } synchronized (DebugPanel.this) { int si = varTabs.getSelectedIndex(); if (si > -1 && si < tabTypes.size()) { @@ -135,10 +167,10 @@ public class DebugPanel extends JPanel { @Override public void run() { + setLoading(true); synchronized (DebugPanel.this) { + SelectedTab oldSel = selectedTab; - SelectedTab firstVisible = null; - SelectedTab newSel = null; InFrame f = Main.getDebugHandler().getFrame(); if (f != null) { debugRegistersTable.setModel(new ABCPanel.VariablesTableModel(f.registers)); @@ -251,23 +283,24 @@ public class DebugPanel extends JPanel { setVisible(newVisible); } if (!tabTypes.isEmpty()) { - if (oldSel != null && tabTypes.contains(oldSel)) { - selectedTab = oldSel; - } else { - selectedTab = tabTypes.get(0); + if (oldSel != null && !tabTypes.contains(oldSel)) { + oldSel = null; } - varTabs.setSelectedIndex(tabTypes.indexOf(selectedTab)); - } else { - selectedTab = null; } + if (oldSel != null) { + selectedTab = oldSel; + varTabs.setSelectedIndex(tabTypes.indexOf(selectedTab)); + } + setLoading(false); } + } }); } public void dispose() { - Main.getDebugHandler().removeVariableChangedListener(listener); + Main.getDebugHandler().removeBreakListener(listener); } } diff --git a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java index 265e25caa..6b12b847f 100644 --- a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java +++ b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java @@ -21,6 +21,7 @@ import com.jpexs.debugger.flash.DebugMessageListener; import com.jpexs.debugger.flash.Debugger; import com.jpexs.debugger.flash.DebuggerCommands; import com.jpexs.debugger.flash.DebuggerConnection; +import com.jpexs.debugger.flash.SWD; import com.jpexs.debugger.flash.Variable; import com.jpexs.debugger.flash.messages.in.InAskBreakpoints; import com.jpexs.debugger.flash.messages.in.InBreakAt; @@ -28,13 +29,19 @@ import com.jpexs.debugger.flash.messages.in.InBreakAtExt; import com.jpexs.debugger.flash.messages.in.InBreakReason; import com.jpexs.debugger.flash.messages.in.InContinue; import com.jpexs.debugger.flash.messages.in.InFrame; +import com.jpexs.debugger.flash.messages.in.InGetSwd; +import com.jpexs.debugger.flash.messages.in.InGetSwf; import com.jpexs.debugger.flash.messages.in.InNumScript; +import com.jpexs.debugger.flash.messages.in.InProcessTag; import com.jpexs.debugger.flash.messages.in.InScript; import com.jpexs.debugger.flash.messages.in.InSetBreakpoint; import com.jpexs.debugger.flash.messages.in.InSwfInfo; import com.jpexs.debugger.flash.messages.in.InTrace; import com.jpexs.debugger.flash.messages.in.InVersion; import com.jpexs.debugger.flash.messages.out.OutGetBreakReason; +import com.jpexs.debugger.flash.messages.out.OutGetSwd; +import com.jpexs.debugger.flash.messages.out.OutGetSwf; +import com.jpexs.debugger.flash.messages.out.OutProcessedTag; import com.jpexs.decompiler.flash.abc.ClassPath; import com.jpexs.decompiler.flash.abc.ScriptPack; import com.jpexs.decompiler.flash.configuration.Configuration; @@ -43,6 +50,7 @@ import com.jpexs.helpers.CancellableWorker; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -50,6 +58,8 @@ import java.util.TreeSet; import java.util.logging.ConsoleHandler; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @@ -61,41 +71,178 @@ public class DebuggerHandler implements DebugConnectionListener { private DebuggerCommands commands = null; private List swfs = new ArrayList<>(); private boolean paused = true; - private Map modulePaths = new HashMap<>(); - private Map classToModule = new HashMap<>(); + private Map modulePaths = new HashMap<>(); + private Map classToModule = new HashMap<>(); + + private Map> toAddBPointMap = new HashMap<>(); + private Map> confirmedPointMap = new HashMap<>(); + private Map> invalidBreakPointMap = new HashMap<>(); + private Map> toRemoveBPointMap = new HashMap<>(); + + private int breakIp = -1; + private String breakScriptName = null; + + public int getBreakIp() { + return breakIp; + } + + public String getBreakScriptName() { + return breakScriptName; + } + + public synchronized void removeBreakPoint(String scriptName, int line) { + if (isBreakpointInvalid(scriptName, line)) { + return; + } + if (isBreakpointToAdd(scriptName, line)) { + toAddBPointMap.get(scriptName).remove(line); + if (toAddBPointMap.get(scriptName).isEmpty()) { + toAddBPointMap.remove(scriptName); + } + } else if (isBreakpointConfirmed(scriptName, line)) { + if (!toRemoveBPointMap.containsKey(scriptName)) { + toRemoveBPointMap.put(scriptName, new TreeSet<>()); + } + toRemoveBPointMap.get(scriptName).add(line); + } + try { + sendBreakPoints(false); + } catch (IOException ex) { + //ignore + } + } + + public synchronized Set getBreakPoints(String scriptName) { + Set lines = new TreeSet<>(); + if (confirmedPointMap.containsKey(scriptName)) { + lines.addAll(confirmedPointMap.get(scriptName)); + } + if (toAddBPointMap.containsKey(scriptName)) { + lines.addAll(toAddBPointMap.get(scriptName)); + } + return lines; + } + + public synchronized void clearBreakPoints() { + for (String scriptName : confirmedPointMap.keySet()) { + if (!toAddBPointMap.containsKey(scriptName)) { + toAddBPointMap.put(scriptName, new TreeSet<>()); + } + toAddBPointMap.get(scriptName).addAll(confirmedPointMap.get(scriptName)); + } + confirmedPointMap.clear(); + invalidBreakPointMap.clear(); + } + + public synchronized Map> getAllBreakPoints(boolean validOnly) { + Map> ret = new HashMap<>(); + for (String scriptName : confirmedPointMap.keySet()) { + Set lines = new TreeSet<>(); + lines.addAll(confirmedPointMap.get(scriptName)); + ret.put(scriptName, lines); + } + for (String scriptName : toAddBPointMap.keySet()) { + if (!ret.containsKey(scriptName)) { + ret.put(scriptName, new TreeSet<>()); + } + ret.get(scriptName).addAll(toAddBPointMap.get(scriptName)); + } + if (!validOnly) { + for (String scriptName : invalidBreakPointMap.keySet()) { + if (!ret.containsKey(scriptName)) { + ret.put(scriptName, new TreeSet<>()); + } + ret.get(scriptName).addAll(invalidBreakPointMap.get(scriptName)); + } + } + return ret; + } + + public boolean addBreakPoint(String scriptName, int line) { + synchronized (this) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "adding bp " + scriptName + ":" + line); + if (isBreakpointToRemove(scriptName, line)) { + toRemoveBPointMap.get(scriptName).remove(line); + if (toRemoveBPointMap.get(scriptName).isEmpty()) { + toRemoveBPointMap.remove(scriptName); + } + } + + if (isBreakpointConfirmed(scriptName, line)) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "bp " + scriptName + ":" + line + " already confirmed"); + return true; + } + if (isBreakpointInvalid(scriptName, line)) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "bp " + scriptName + ":" + line + " already invalid"); + return false; + } + if (!toAddBPointMap.containsKey(scriptName)) { + toAddBPointMap.put(scriptName, new TreeSet<>()); + } + toAddBPointMap.get(scriptName).add(line); + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "bp " + scriptName + ":" + line + " added to todo"); + } + try { + sendBreakPoints(false); + } catch (IOException ex) { + //ignored + } + + return true; + } + + public synchronized boolean isBreakpointConfirmed(String scriptName, int line) { + return confirmedPointMap.containsKey(scriptName) && confirmedPointMap.get(scriptName).contains(line); + } + + public synchronized boolean isBreakpointToAdd(String scriptName, int line) { + return toAddBPointMap.containsKey(scriptName) && toAddBPointMap.get(scriptName).contains(line); + } + + public synchronized boolean isBreakpointToRemove(String scriptName, int line) { + return toRemoveBPointMap.containsKey(scriptName) && toRemoveBPointMap.get(scriptName).contains(line); + } + + public synchronized boolean isBreakpointInvalid(String scriptName, int line) { + return invalidBreakPointMap.containsKey(scriptName) && invalidBreakPointMap.get(scriptName).contains(line); + } + + private synchronized void markBreakPointInvalid(String scriptName, int line) { + if (!invalidBreakPointMap.containsKey(scriptName)) { + invalidBreakPointMap.put(scriptName, new TreeSet<>()); + } + invalidBreakPointMap.get(scriptName).add(line); + } private InFrame frame; private InBreakAtExt breakInfo; private InBreakReason breakReason; - private final List varListeners = new ArrayList<>(); + private final List breakListeners = new ArrayList<>(); private final List traceListeners = new ArrayList<>(); private final List clisteners = new ArrayList<>(); - public void notSuspended() { - frame = null; - breakInfo = null; - breakReason = null; - for (VariableChangedListener l : varListeners) { - l.variablesChanged(); - } - } - public String moduleToString(int file) { if (!modulePaths.containsKey(file)) { return "unknown"; } - return modulePaths.get(file).toString(); + return modulePaths.get(file); } - public InBreakAtExt getBreakInfo() { + public synchronized InBreakAtExt getBreakInfo() { + if (!paused) { + return null; + } return breakInfo; } - public InBreakReason getBreakReason() { + public synchronized InBreakReason getBreakReason() { + if (!paused) { + return null; + } return breakReason; } @@ -113,14 +260,16 @@ public class DebuggerHandler implements DebugConnectionListener { } - public static interface VariableChangedListener { + public static interface BreakListener { - public void variablesChanged(); + public void breakAt(String scriptName, int line); + + public void doContinue(); } - public void addVariableChangedListener(VariableChangedListener l) { - varListeners.add(l); + public void addBreakListener(BreakListener l) { + breakListeners.add(l); } public void addTraceListener(TraceListener l) { @@ -131,8 +280,8 @@ public class DebuggerHandler implements DebugConnectionListener { traceListeners.remove(l); } - public void removeVariableChangedListener(VariableChangedListener l) { - varListeners.remove(l); + public void removeBreakListener(BreakListener l) { + breakListeners.remove(l); } public void addConnectionListener(ConnectionListener l) { @@ -143,19 +292,27 @@ public class DebuggerHandler implements DebugConnectionListener { clisteners.remove(l); } - public InFrame getFrame() { + public synchronized InFrame getFrame() { + if (!paused) { + return null; + } return frame; } - public int moduleIdOf(ScriptPack pack) { - if (classToModule.containsKey(pack.getClassPath())) { - return classToModule.get(pack.getClassPath()); + public synchronized int moduleIdOf(String pack) { + if (classToModule.containsKey(pack)) { + return classToModule.get(pack); } return -1; } - public synchronized boolean isPaused() { - return paused; + public boolean isPaused() { + if (!isConnected()) { + return false; + } + synchronized (this) { + return paused; + } } public List getSwfs() { @@ -174,12 +331,12 @@ public class DebuggerHandler implements DebugConnectionListener { for (ConnectionListener l : clisteners) { l.disconnected(); } - for (VariableChangedListener l : varListeners) { - l.variablesChanged(); - } + /*for (BreakListener l : breakListeners) { + l.breakAt(); + }*/ } - public boolean isConnected() { + public synchronized boolean isConnected() { return connected; } @@ -191,7 +348,7 @@ public class DebuggerHandler implements DebugConnectionListener { } private static void enlog(Class cls) { - Level level = Level.FINEST; + Level level = Level.INFO; Logger mylog = Logger.getLogger(cls.getName()); mylog.setLevel(level); @@ -201,24 +358,95 @@ public class DebuggerHandler implements DebugConnectionListener { } @Override - public void connected(DebuggerConnection con) { + public void failedListen(IOException ex) { + View.execInEventDispatchLater(new Runnable() { - synchronized (DebuggerHandler.this) { - paused = true; + @Override + public void run() { + disconnect(); + Main.stopRun(); + Main.stopWork(); + View.showMessageDialog(Main.getMainFrame().getPanel(), AppStrings.translate("error.debug.listen").replace("%port%", "" + Debugger.DEBUG_PORT)); + Main.getMainFrame().getPanel().updateMenu(); + } + }); + + } + + @Override + public void connected(DebuggerConnection con) { + clearBreakPoints(); + + Main.startWork(AppStrings.translate("work.debugging"), null); + + synchronized (this) { + paused = false; } Main.getMainFrame().getPanel().updateMenu(); //enlog(DebuggerConnection.class); //enlog(DebuggerCommands.class); + enlog(DebuggerHandler.class); try { - //rootLog.getHandlers()[0].setLevel(level); con.getMessage(InVersion.class); } catch (IOException ex) { Logger.getLogger(DebuggerHandler.class.getName()).log(Level.SEVERE, null, ex); } - commands = new DebuggerCommands(con); + + //Respon to InProcessTag with OutProcessedTag + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InProcessTag message) { + try { + con.writeMessage(new OutProcessedTag(con)); + } catch (IOException ex) { + //disconnect(); + //ignore + } + } + }); + + Map moduleNames = new HashMap<>(); + try { + + int numScript = con.getMessage(InNumScript.class).num; + for (int i = 0; i < numScript; i++) { + InScript sc = con.getMessage(InScript.class); + moduleNames.put(sc.module, sc.name); + } + + modulePaths = new HashMap<>(); + classToModule = new HashMap<>(); + //Pattern patMainFrame = Pattern.compile("^Actions for Scene ([0-9]+): Frame ([0-9]+) of Layer Name .*$"); + //Pattern patSymbol = Pattern.compile("^Actions for Symbol ([0-9]+): Frame ([0-9]+) of Layer Name .*$"); + //Pattern patAS2 = Pattern.compile("^([^:]+): .*\\.as$"); + Pattern patAS3 = Pattern.compile("^(.*);(.*);(.*)\\.as$"); + for (int file : moduleNames.keySet()) { + String name = moduleNames.get(file); + String[] parts = name.split(";"); + + Matcher m; + /*if ((m = patMainFrame.matcher(name)).matches()) { + name = "\\frame_" + m.group(2) + "\\DoAction"; + } else if ((m = patSymbol.matcher(name)).matches()) { + name = "\\DefineSprite(" + m.group(1) + ")\\frame_" + m.group(2) + "\\DoAction"; + } else if ((m = patAS2.matcher(name)).matches()) { + name = "\\_Packages\\" + m.group(1).replace(".", "\\"); + } else*/ + if ((m = patAS3.matcher(name)).matches()) { + String clsName = m.group(3); + String pkg = m.group(2).replace("\\", "."); + name = DottedChain.parse(pkg).add(clsName).toString(); + } + modulePaths.put(file, name); + classToModule.put(name, file); + } + + //con.getMessage(InSetBreakpoint.class); + commands = new DebuggerCommands(con); + commands.stopWarning(); commands.setStopOnFault(); commands.setEnumerateOverride(); @@ -227,43 +455,56 @@ public class DebuggerHandler implements DebugConnectionListener { commands.setSwfLoadNotify(); commands.setGetterTimeout(1500); commands.setSetterTimeout(5000); - commands.squelch(true); - swfs = commands.getSwfInfo(1); - - Map moduleNames = new HashMap<>(); - - modulePaths = new HashMap<>(); - classToModule = new HashMap<>(); - - int numScript = con.getMessage(InNumScript.class).num; - for (int i = 0; i < numScript; i++) { - InScript sc = con.getMessage(InScript.class); - moduleNames.put(sc.module, sc.name); + con.wideLines = commands.getOption("wide_line_player", "false").equals("true"); + if (con.wideLines) { + commands.setOption("wide_line_debugger", "on"); } + commands.squelch(true); - for (int mname : moduleNames.keySet()) { - String name = moduleNames.get(mname); - String[] parts = name.split(";"); + swfs = commands.getSwfInfo(1); + con.sendMessage(new OutGetSwf(con, 0), InGetSwf.class); + InGetSwd iswd = con.sendMessage(new OutGetSwd(con, 0), InGetSwd.class); - if (parts.length == 3) { - String clsName = parts[2].replace(".as", ""); - String pkg = parts[1].replace("/", "\\").replace("\\", "."); - ClassPath cp = new ClassPath(DottedChain.parse(pkg), clsName); - modulePaths.put(mname, cp); - classToModule.put(cp, mname); + boolean isAS3 = (Main.getMainFrame().getPanel().getCurrentSwf().isAS3()); + + InSetBreakpoint isb = con.getMessage(InSetBreakpoint.class); + synchronized (this) { + for (int i = 0; i < isb.files.size(); i++) { + String sname = moduleNames.get(isb.files.get(i)); + if (!confirmedPointMap.containsKey(sname)) { + confirmedPointMap.put(sname, new TreeSet<>()); + } + if (toAddBPointMap.containsKey(sname)) { + toAddBPointMap.get(sname).remove(isb.lines.get(i)); + if (toAddBPointMap.get(sname).isEmpty()) { + toAddBPointMap.remove(sname); + } + } + confirmedPointMap.get(sname).add(isb.lines.get(i)); + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} submitted successfully", new Object[]{sname, isb.lines.get(i)}); } } - con.getMessage(InSetBreakpoint.class); - con.getMessage(InAskBreakpoints.class); - con.addMessageListener(new DebugMessageListener() { + synchronized (this) { + connected = true; + } + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InAskBreakpoints message) { + + } + }); + con.addMessageListener(new DebugMessageListener() { @Override public void message(InContinue msg) { synchronized (DebuggerHandler.this) { paused = false; + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "continued"); + } + for (BreakListener bl : breakListeners) { + bl.doContinue(); } - Main.getMainFrame().getPanel().updateMenu(); } }); con.addMessageListener(new DebugMessageListener() { @@ -272,89 +513,122 @@ public class DebuggerHandler implements DebugConnectionListener { public void message(InBreakAt message) { synchronized (DebuggerHandler.this) { paused = true; + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "paused"); } - View.execInEventDispatchLater(new Runnable() { - @Override - public void run() { + String newBreakScriptName = "unknown"; + if (modulePaths.containsKey(message.file)) { + //Logger.getLogger(DebuggerCommands.class.getName()).log(Level.SEVERE, "Invalid file: " + message.file); + newBreakScriptName = modulePaths.get(message.file); + } - Main.getMainFrame().getPanel().updateMenu(); - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "break at {0}:{1}", new Object[]{moduleNames.get(message.file), message.line}); - if (!modulePaths.containsKey(message.file)) { + try { + breakInfo = con.getMessage(InBreakAtExt.class); + breakReason = con.sendMessage(new OutGetBreakReason(con), InBreakReason.class); + + final String[] reasonNames = new String[]{"unknown", "breakpoint", "watch", "fault", "stopRequest", "step", "halt", "scriptLoaded"}; + String reason = breakReason.reason < reasonNames.length ? reasonNames[breakReason.reason] : reasonNames[0]; + + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "break at {0}:{1}, reason: {2}", new Object[]{newBreakScriptName, message.line, reason}); + + sendBreakPoints(false); + synchronized (DebuggerHandler.this) { + breakScriptName = newBreakScriptName; + breakIp = message.line; + } + + if (breakReason.reason == InBreakReason.REASON_SCRIPT_LOADED) { + if (!Configuration.debugHalt.get()) { + commands.sendContinue(); return; } - - ClassPath cls = modulePaths.get(message.file); - Main.startWork(AppStrings.translate("work.breakat") + cls + ":" + message.line, null); - - try { - breakInfo = con.getMessage(InBreakAtExt.class); - breakReason = con.sendMessage(new OutGetBreakReason(con), InBreakReason.class); - frame = commands.getFrame(0); - - for (VariableChangedListener l : varListeners) { - l.variablesChanged(); - } - - } catch (IOException ex) { - //ignore - } - Main.breakAt(cls, message.line); + Main.startWork(AppStrings.translate("work.halted"), null); + } else { + Main.startWork(AppStrings.translate("work.breakat") + newBreakScriptName + ":" + message.line + " " + AppStrings.translate("debug.break.reason." + reason), null); } + frame = commands.getFrame(0); + + for (BreakListener l : breakListeners) { + l.breakAt(newBreakScriptName, message.line); + } + + } catch (IOException ex) { + //ignore } - ); - //dc.sendContinue(); + } }); - //commands.sendContinue(); - List packs = Main.getMainFrame().getPanel().getCurrentSwf().getAS3Packs(); - for (ScriptPack sp : packs) { - ClassPath cp = sp.getClassPath(); - if (classToModule.containsKey(cp)) { - int file = classToModule.get(cp); - Set bpts = new TreeSet<>(Main.getPackBreakPoints(sp)); - for (int line : bpts) { - if (!commands.addBreakPoint(file, line)) { - Main.markBreakPointInvalid(sp, line); - } - } - } - } - - Main.getMainFrame() - .getPanel().refreshBreakPoints(); - connected = true; for (ConnectionListener l : clisteners) { l.connected(); } - if (Configuration.debugHalt.get()) { - Main.startWork(AppStrings.translate("work.halted"), null); - } else { + con.addMessageListener(new DebugMessageListener() { + + @Override + public void message(InTrace tr) { + for (TraceListener l : traceListeners) { + l.trace(tr.text); + } + } + }); + + if (!isAS3) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINER, "End of connect - sending continue"); commands.sendContinue(); } - new CancellableWorker() { - - @Override - protected Object doInBackground() throws Exception { - try { - while (isConnected()) { - InTrace tr = con.getMessage(InTrace.class); - for (TraceListener l : traceListeners) { - l.trace(tr.text); - } - } - } catch (IOException ex) { - //ignore - } - return null; - } - }.execute(); - } catch (IOException ex) { - connected = false; + + synchronized (this) { + connected = false; + } } } + + private void sendBreakPoints(boolean force) throws IOException { + if (!force && !isPaused()) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINEST, "not sending bps, not paused"); + return; + } + synchronized (this) { + for (String scriptName : toRemoveBPointMap.keySet()) { + int file = moduleIdOf(scriptName); + if (file > -1) { + for (int line : toRemoveBPointMap.get(scriptName)) { + if (isBreakpointConfirmed(scriptName, line)) { + commands.removeBreakPoint(file, line); + confirmedPointMap.get(scriptName).remove(line); + if (confirmedPointMap.get(scriptName).isEmpty()) { + confirmedPointMap.remove(scriptName); + } + } + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} removed", new Object[]{scriptName, line}); + } + } + } + toRemoveBPointMap.clear(); + + for (String scriptName : toAddBPointMap.keySet()) { + int file = moduleIdOf(scriptName); + if (file > -1) { + for (int line : toAddBPointMap.get(scriptName)) { + if (commands.addBreakPoint(file, line)) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} submitted successfully", new Object[]{scriptName, line}); + if (!confirmedPointMap.containsKey(scriptName)) { + confirmedPointMap.put(scriptName, new TreeSet<>()); + } + confirmedPointMap.get(scriptName).add(line); + } else { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} unable to submit", new Object[]{scriptName, line}); + markBreakPointInvalid(scriptName, line); + } + } + } + } + toAddBPointMap.clear(); + } + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINEST, "sending bps finished"); + + } } diff --git a/src/com/jpexs/decompiler/flash/gui/Main.java b/src/com/jpexs/decompiler/flash/gui/Main.java index c8ecd5f1f..cf3abc96d 100644 --- a/src/com/jpexs/decompiler/flash/gui/Main.java +++ b/src/com/jpexs/decompiler/flash/gui/Main.java @@ -21,6 +21,7 @@ import com.jpexs.debugger.flash.DebugMessageListener; import com.jpexs.debugger.flash.Debugger; import com.jpexs.debugger.flash.DebuggerCommands; import com.jpexs.debugger.flash.DebuggerConnection; +import com.jpexs.debugger.flash.SWD; import com.jpexs.debugger.flash.messages.in.InAskBreakpoints; import com.jpexs.debugger.flash.messages.in.InBreakAt; import com.jpexs.debugger.flash.messages.in.InNumScript; @@ -81,6 +82,7 @@ import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.OutputStream; import java.lang.reflect.Field; import java.net.InetSocketAddress; import java.net.Proxy; @@ -159,117 +161,285 @@ public class Main { private static DebuggerHandler debugHandler = null; - private static Map> breakPointMap = new WeakHashMap<>(); - private static Map> invalidBreakPointMap = new WeakHashMap<>(); - private static int ip = 0; - private static ClassPath ipClass = null; + //private static int ip = 0; + //private static String ipClass = null; + private static Process runProcess; + private static boolean runProcessDebug; - public static void debuggerNotSuspended() { - getDebugHandler().notSuspended(); + private static boolean inited = false; + + private static File runTempFile; + + public static void freeRun() { + synchronized (Main.class) { + if (runTempFile != null) { + runTempFile.delete(); + runTempFile = null; + } + + runProcess = null; + } mainFrame.getPanel().clearDebuggerColors(); - ip = 0; - ipClass = null; - } - - public static void clearBreakPoints(ScriptPack pack) { - if (breakPointMap.containsKey(pack)) { - breakPointMap.remove(pack); + if (runProcessDebug) { + Main.getDebugHandler().disconnect(); } } - public static boolean isDebugging() { - return mainFrame.getMenu().isDebugRunning(); + public static synchronized boolean isDebugPaused() { + return runProcess != null && runProcessDebug && getDebugHandler().isPaused(); } - public static int getIp(ScriptPack pack) { - return ip; + public static synchronized boolean isDebugRunning() { + return runProcess != null && runProcessDebug; } - public static ClassPath getIpClass() { - return ipClass; + public static synchronized boolean isDebugConnected() { + return getDebugHandler().isConnected(); } - public static void breakAt(ClassPath clsName, int ip) { - Main.ip = ip; - Main.ipClass = clsName; - mainFrame.getPanel().gotoClassLine(getMainFrame().getPanel().getCurrentSwf(), clsName.toString(), ip); - //Main.getMainFrame().getPanel().debuggerBreakAt(Main.getMainFrame().getPanel().getCurrentSwf(), cls, message.line); + public static synchronized boolean isRunning() { + return runProcess != null && !runProcessDebug; } - public static boolean isBreakPointValid(ScriptPack pack, int line) { - if (!invalidBreakPointMap.containsKey(pack)) { - return true; + public static void runPlayer(String title, final String exePath, String file, String flashVars) { + if (flashVars != null && !flashVars.isEmpty()) { + file += "?" + flashVars; } - return !invalidBreakPointMap.get(pack).contains(line); - - } - - public static void markBreakPointInvalid(ScriptPack pack, int line) { - if (!invalidBreakPointMap.containsKey(pack)) { - invalidBreakPointMap.put(pack, new TreeSet<>()); + if (!new File(file).exists()) { + return; } - invalidBreakPointMap.get(pack).add(line); - } - public static void addBreakPoint(ScriptPack pack, int line) { - if (!breakPointMap.containsKey(pack)) { - breakPointMap.put(pack, new TreeSet<>()); - } - breakPointMap.get(pack).add(line); - if (debugHandler.isConnected()) { - int file = debugHandler.moduleIdOf(pack); - if (file > -1) { + final String ffile = file; + + CancellableWorker runWorker = new CancellableWorker() { + + @Override + protected Object doInBackground() throws Exception { + Process proc; try { - if (!debugHandler.getCommands().addBreakPoint(file, line)) { - markBreakPointInvalid(pack, line); + proc = Runtime.getRuntime().exec("\"" + exePath + "\" \"file://" + ffile + "\""); + } catch (IOException ex) { + Logger.getLogger(MainFrameMenu.class.getName()).log(Level.SEVERE, null, ex); + + return null; + } + boolean isDebug; + + synchronized (Main.class) { + runProcess = proc; + isDebug = runProcessDebug; + } + if (isDebug) { + mainFrame.getMenu().hilightPath("/debugging"); + } + mainFrame.getMenu().updateComponents(); + try { + if (proc != null) { + proc.waitFor(); + } + } catch (InterruptedException ex) { + if (proc != null) { + try { + proc.destroy(); + } catch (Exception ex2) { + //ignore + } } - } catch (IOException ex) { - debugHandler.disconnect(); - //ignore } + freeRun(); + mainFrame.getMenu().updateComponents(); + return null; } + + @Override + protected void done() { + Main.stopWork(); + } + + @Override + public void workerCancelled() { + Main.stopWork(); + synchronized (Main.class) { + if (runProcess != null) { + try { + runProcess.destroy(); + } catch (Exception ex) { + + } + } + } + freeRun(); + mainFrame.getMenu().updateComponents(); + } + + }; + + mainFrame.getMenu().updateComponents(); + Main.startWork(title + "...", runWorker); + runWorker.execute(); + } + + public static void stopRun() { + + synchronized (Main.class) { + if (runProcess != null) { + runProcess.destroy(); + } + } + freeRun(); + stopDebugger(); + mainFrame.getMenu().updateComponents(); + } + + public static void run(SWF swf) { + String flashVars = "";//key=val&key2=val2 + String playerLocation = Configuration.playerLocation.get(); + if (playerLocation.isEmpty() || (!new File(playerLocation).exists())) { + View.showMessageDialog(null, AppStrings.translate("message.playerpath.notset"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); + advancedSettings("paths"); + return; + } + if (swf == null) { + return; + } + File tempFile; + try { + tempFile = File.createTempFile("ffdec_run_", ".swf"); + + try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(tempFile))) { + swf.saveTo(fos); + } + } catch (IOException ex) { + return; + + } + if (tempFile != null) { + synchronized (Main.class) { + runTempFile = tempFile; + runProcessDebug = false; + } + runPlayer(AppStrings.translate("work.running"), playerLocation, tempFile.getAbsolutePath(), flashVars); } } - public static void removeBreakPoint(ScriptPack pack, int line) { - if (breakPointMap.containsKey(pack)) { - Set lines = breakPointMap.get(pack); - if (lines != null) { - lines.remove(line); - } + public static void runDebug(SWF swf) { + String flashVars = "";//key=val&key2=val2 + String playerLocation = Configuration.playerDebugLocation.get(); + if (playerLocation.isEmpty() || (!new File(playerLocation).exists())) { + View.showMessageDialog(null, AppStrings.translate("message.playerpath.debug.notset"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); + Main.advancedSettings("paths"); + return; } - if (debugHandler.isConnected()) { - int file = debugHandler.moduleIdOf(pack); - if (file > -1) { - try { - debugHandler.getCommands().removeBreakPoint(file, line); - } catch (IOException ex) { - debugHandler.disconnect(); - //ignore + if (swf == null) { + return; + } + File tempFile = null; + + try { + tempFile = File.createTempFile("ffdec_debug_", ".swf"); + } catch (Exception ex) { + + } + if (tempFile != null) { + final File fTempFile = tempFile; + CancellableWorker instrumentWorker = new CancellableWorker() { + + @Override + protected Object doInBackground() throws Exception { + + try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(fTempFile))) { + swf.saveTo(fos); + } + //Inject Loader + SWF instrSWF = null; + try (FileInputStream fis = new FileInputStream(fTempFile)) { + instrSWF = new SWF(fis, false, false); + + } catch (InterruptedException ex) { + Logger.getLogger(MainFrameMenu.class + .getName()).log(Level.SEVERE, null, ex); + } + if (instrSWF != null) { + if (instrSWF.isAS3()) { + instrSWF.enableDebugging(true, new File(".")); + } else { + instrSWF.enableDebugging(false, new File(".")); + File swdFile = new File(fTempFile.getAbsolutePath().replace(".swf", ".swd")); + instrSWF.generateSwdFile(swdFile, getPackBreakPoints(true)); + } + try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(fTempFile))) { + instrSWF.saveTo(fos); + } + } + return null; } - } + + @Override + public void workerCancelled() { + Main.stopWork(); + } + + @Override + protected void done() { + synchronized (Main.class) { + runTempFile = fTempFile; + runProcessDebug = true; + } + Main.stopWork(); + Main.startDebugger(); + runPlayer(AppStrings.translate("work.debugging.wait"), playerLocation, fTempFile.getAbsolutePath(), flashVars); + } + + }; + + Main.startWork(AppStrings.translate("work.debugging.instrumenting"), instrumentWorker); + instrumentWorker.execute(); } } - public static boolean toggleBreakPoint(ScriptPack pack, int line) { - if (!breakPointMap.containsKey(pack)) { - addBreakPoint(pack, line); - return true; - } - if (breakPointMap.get(pack).contains(line)) { - removeBreakPoint(pack, line); + /* public static void debuggerNotSuspended() { + + }*/ + public static boolean isDebugging() { + return isDebugRunning(); + } + + public synchronized static int getIp(Object pack) { + return getDebugHandler().getBreakIp(); + } + + public synchronized static String getIpClass() { + return getDebugHandler().getBreakScriptName(); + } + + public static synchronized boolean isBreakPointValid(String scriptName, int line) { + return !getDebugHandler().isBreakpointInvalid(scriptName, line); + } + + public synchronized static void addBreakPoint(String scriptName, int line) { + getDebugHandler().addBreakPoint(scriptName, line); + } + + public synchronized static void removeBreakPoint(String scriptName, int line) { + getDebugHandler().removeBreakPoint(scriptName, line); + } + + public synchronized static boolean toggleBreakPoint(String scriptName, int line) { + if (getDebugHandler().isBreakpointToAdd(scriptName, line) || getDebugHandler().isBreakpointConfirmed(scriptName, line)) { + getDebugHandler().removeBreakPoint(scriptName, line); return false; } else { - addBreakPoint(pack, line); + getDebugHandler().addBreakPoint(scriptName, line); return true; } } - public static Set getPackBreakPoints(ScriptPack pack) { - if (!breakPointMap.containsKey(pack)) { - return new HashSet<>(); - } - return breakPointMap.get(pack); + public synchronized static Map> getPackBreakPoints(boolean validOnly) { + return getDebugHandler().getAllBreakPoints(validOnly); + } + + public synchronized static Set getScriptBreakPoints(String pack) { + return getDebugHandler().getBreakPoints(pack); } public static DebuggerHandler getDebugHandler() { @@ -319,6 +489,14 @@ public class Main { } } + public synchronized static boolean isInited() { + return inited; + } + + public synchronized static void setSessionLoaded(boolean v) { + inited = v; + } + public static boolean isWorking() { return working; } @@ -1151,26 +1329,51 @@ public class Main { */ flashDebugger = new Debugger(); debugHandler = new DebuggerHandler(); + debugHandler.addBreakListener(new DebuggerHandler.BreakListener() { + + @Override + public void doContinue() { + mainFrame.getPanel().clearDebuggerColors(); + } + + @Override + public void breakAt(String scriptName, int line) { + View.execInEventDispatch(new Runnable() { + + @Override + public void run() { + mainFrame.getPanel().gotoClassLine(getMainFrame().getPanel().getCurrentSwf(), scriptName, line); + } + }); + } + }); debugHandler.addConnectionListener(new DebuggerHandler.ConnectionListener() { @Override public void connected() { + Main.mainFrame.getMenu().updateComponents(); } @Override public void disconnected() { - ip = 0; - ipClass = null; + } }); flashDebugger.addConnectionListener(debugHandler); - flashDebugger.start(); } catch (IOException ex) { - //ignore + Logger.getLogger(Main.class.getName()).log(Level.SEVERE, "eeex", ex); } } + public static void startDebugger() { + flashDebugger.startDebugger(); + } + + public static void stopDebugger() { + flashDebugger.stopDebugger(); + } + public static void showModeFrame() { ensureMainFrame(); mainFrame.setVisible(true); @@ -1371,6 +1574,7 @@ public class Main { * @throws IOException On error */ public static void main(String[] args) throws IOException { + setSessionLoaded(false); clearTemp(); try { @@ -1400,6 +1604,7 @@ public class Main { } }); } else { + setSessionLoaded(true); String[] filesToOpen = CommandLineArgumentParser.parseArguments(args); if (filesToOpen != null && filesToOpen.length > 0) { View.execInEventDispatch(() -> { @@ -1447,9 +1652,16 @@ public class Main { if (sourceInfos.length > 0) { openFile(sourceInfos, () -> { mainFrame.getPanel().tagTree.setSelectionPathString(Configuration.lastSessionSelection.get()); + setSessionLoaded(true); }); + } else { + setSessionLoaded(true); } + } else { + setSessionLoaded(true); } + } else { + setSessionLoaded(true); } } diff --git a/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java b/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java index 256b29150..f37704a6b 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java +++ b/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.gui; import com.jpexs.debugger.flash.DebuggerCommands; +import com.jpexs.debugger.flash.messages.out.OutStepContinue; import com.jpexs.decompiler.flash.ApplicationInfo; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SWFBundle; @@ -661,10 +662,11 @@ public abstract class MainFrameMenu implements MenuBuilder { public void updateComponents(SWF swf) { this.swf = swf; - boolean isRunning = isRunning(); - boolean isDebugRunning = isDebugRunning(); + boolean isRunning = Main.isRunning(); + boolean isDebugRunning = Main.isDebugRunning(); + boolean isDebugPaused = Main.isDebugPaused(); + boolean isRunningOrDebugging = isRunning || isDebugRunning; - boolean isDebugPaused = isDebugPaused(); boolean swfSelected = swf != null; boolean isWorking = Main.isWorking(); @@ -725,7 +727,7 @@ public abstract class MainFrameMenu implements MenuBuilder { setMenuEnabled("/help/about", !isWorking); setMenuEnabled("/file/start/run", swfSelected && !isRunningOrDebugging); - setMenuEnabled("/file/start/debug", hasAbc && !isRunningOrDebugging); + setMenuEnabled("/file/start/debug", !isRunningOrDebugging); setMenuEnabled("/file/start/stop", isRunningOrDebugging); setMenuEnabled("/debugging/debug/stop", isRunningOrDebugging); //same as previous @@ -1098,231 +1100,22 @@ public abstract class MainFrameMenu implements MenuBuilder { KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); manager.removeKeyEventDispatcher(keyEventDispatcher); - if (runProcess != null) { - try { - runProcess.destroy(); - } catch (Exception ex) { - - } - } - } - - private Process runProcess; - private boolean runProcessDebug; - - private File runTempFile; - - public synchronized boolean isDebugPaused() { - return runProcess != null && runProcessDebug && Main.getDebugHandler().isPaused(); - } - - public synchronized boolean isDebugRunning() { - return runProcess != null && runProcessDebug; - } - - public synchronized boolean isRunning() { - return runProcess != null && !runProcessDebug; - } - - private synchronized void freeRun() { - if (runTempFile != null) { - runTempFile.delete(); - runTempFile = null; - } - runProcess = null; - mainFrame.getPanel().clearDebuggerColors(); - if (runProcessDebug) { - Main.getDebugHandler().disconnect(); - } - } - - private void runPlayer(String title, final String exePath, String file, String flashVars) { - if (flashVars != null && !flashVars.isEmpty()) { - file += "?" + flashVars; - } - if (!new File(file).exists()) { - return; - } - - final String ffile = file; - - CancellableWorker runWorker = new CancellableWorker() { - - @Override - protected Object doInBackground() throws Exception { - Process proc; - try { - proc = Runtime.getRuntime().exec("\"" + exePath + "\" \"file://" + ffile + "\""); - } catch (IOException ex) { - Logger.getLogger(MainFrameMenu.class.getName()).log(Level.SEVERE, null, ex); - - return null; - } - synchronized (this) { - runProcess = proc; - } - if (runProcessDebug) { - hilightPath("/debugging"); - } - updateComponents(); - try { - if (proc != null) { - proc.waitFor(); - } - } catch (InterruptedException ex) { - if (proc != null) { - try { - proc.destroy(); - } catch (Exception ex2) { - //ignore - } - } - } - freeRun(); - updateComponents(); - return null; - } - - @Override - protected void done() { - Main.stopWork(); - } - - @Override - public void workerCancelled() { - Main.stopWork(); - synchronized (MainFrameMenu.this) { - if (runProcess != null) { - try { - runProcess.destroy(); - } catch (Exception ex) { - - } - } - } - freeRun(); - updateComponents(); - } - - }; - - updateComponents(); - Main.startWork(title + "...", runWorker); - runWorker.execute(); + Main.stopRun(); } public boolean runActionPerformed(ActionEvent evt) { - String flashVars = "";//key=val&key2=val2 - String playerLocation = Configuration.playerLocation.get(); - if (playerLocation.isEmpty() || (!new File(playerLocation).exists())) { - View.showMessageDialog(null, AppStrings.translate("message.playerpath.notset"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); - Main.advancedSettings("paths"); - return true; - } - if (swf == null) { - return true; - } - File tempFile; - try { - tempFile = File.createTempFile("ffdec_run_", ".swf"); - - try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(tempFile))) { - swf.saveTo(fos); - } - } catch (IOException ex) { - return true; - - } - if (tempFile != null) { - synchronized (this) { - runTempFile = tempFile; - runProcessDebug = false; - } - runPlayer(AppStrings.translate("work.running"), playerLocation, tempFile.getAbsolutePath(), flashVars); - } + Main.run(swf); return true; } public boolean debugActionPerformed(ActionEvent evt) { - String flashVars = "";//key=val&key2=val2 - String playerLocation = Configuration.playerDebugLocation.get(); - if (playerLocation.isEmpty() || (!new File(playerLocation).exists())) { - View.showMessageDialog(null, AppStrings.translate("message.playerpath.debug.notset"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); - Main.advancedSettings("paths"); - return true; - } - if (swf == null) { - return true; - } - File tempFile = null; - - try { - tempFile = File.createTempFile("ffdec_debug_", ".swf"); - } catch (Exception ex) { - - } - if (tempFile != null) { - final File fTempFile = tempFile; - CancellableWorker instrumentWorker = new CancellableWorker() { - - @Override - protected Object doInBackground() throws Exception { - - try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(fTempFile))) { - swf.saveTo(fos); - } - //Inject Loader - SWF instrSWF = null; - try (FileInputStream fis = new FileInputStream(fTempFile)) { - instrSWF = new SWF(fis, false, false); - - } catch (InterruptedException ex) { - Logger.getLogger(MainFrameMenu.class - .getName()).log(Level.SEVERE, null, ex); - } - if (instrSWF != null) { - instrSWF.enableDebugging(true, new File(".")); - try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(fTempFile))) { - instrSWF.saveTo(fos); - } - } - return null; - } - - @Override - public void workerCancelled() { - Main.stopWork(); - } - - @Override - protected void done() { - synchronized (MainFrameMenu.this) { - runTempFile = fTempFile; - runProcessDebug = true; - } - Main.stopWork(); - runPlayer(AppStrings.translate("work.debugging"), playerLocation, fTempFile.getAbsolutePath(), flashVars); - } - - }; - - Main.startWork(AppStrings.translate("work.debugging.instrumenting"), instrumentWorker); - instrumentWorker.execute(); - } + Main.runDebug(swf); return true; } public boolean stopActionPerformed(ActionEvent evt) { - - synchronized (this) { - if (runProcess != null) { - runProcess.destroy(); - } - } - freeRun(); - - updateComponents(); + Main.stopRun(); return true; } @@ -1339,7 +1132,6 @@ public abstract class MainFrameMenu implements MenuBuilder { } public boolean stepOverActionPerformed(ActionEvent evt) { - Main.debuggerNotSuspended(); try { @@ -1356,8 +1148,6 @@ public abstract class MainFrameMenu implements MenuBuilder { } public boolean stepIntoActionPerformed(ActionEvent evt) { - Main.debuggerNotSuspended(); - try { DebuggerCommands cmd = Main.getDebugHandler().getCommands(); mainFrame.getPanel().clearDebuggerColors(); @@ -1373,8 +1163,6 @@ public abstract class MainFrameMenu implements MenuBuilder { } public boolean stepOutActionPerformed(ActionEvent evt) { - Main.debuggerNotSuspended(); - try { DebuggerCommands cmd = Main.getDebugHandler().getCommands(); mainFrame.getPanel().clearDebuggerColors(); @@ -1389,10 +1177,9 @@ public abstract class MainFrameMenu implements MenuBuilder { } public boolean continueActionPerformed(ActionEvent evt) { - Main.debuggerNotSuspended(); - try { DebuggerCommands cmd = Main.getDebugHandler().getCommands(); + mainFrame.getPanel().clearDebuggerColors(); Main.startWork(AppStrings.translate("work.debugging") + "...", null); cmd.sendContinue(); } catch (IOException ex) { diff --git a/src/com/jpexs/decompiler/flash/gui/MainFrameRibbonMenu.java b/src/com/jpexs/decompiler/flash/gui/MainFrameRibbonMenu.java index f75089beb..cd6c33b07 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainFrameRibbonMenu.java +++ b/src/com/jpexs/decompiler/flash/gui/MainFrameRibbonMenu.java @@ -539,18 +539,22 @@ public class MainFrameRibbonMenu extends MainFrameMenu { throw new IllegalArgumentException("Menu not found: " + path); } Object o = menuItems.get(path); - if (o instanceof JRibbonBand) { - ((JRibbonBand) o).setEnabled(enabled); - } else if (o instanceof AbstractCommandButton) { - ((AbstractCommandButton) o).setEnabled(enabled); - } else if (o instanceof RibbonApplicationMenuEntryPrimary) { - ((RibbonApplicationMenuEntryPrimary) o).setEnabled(enabled); - } else if (o instanceof RibbonApplicationMenuEntryFooter) { - ((RibbonApplicationMenuEntryFooter) o).setEnabled(enabled); - } else if (o instanceof JComponent) { - ((JComponent) o).setEnabled(enabled); - } else { - throw new IllegalArgumentException("Cannot set enabled to: " + path); + try { + if (o instanceof JRibbonBand) { + ((JRibbonBand) o).setEnabled(enabled); + } else if (o instanceof AbstractCommandButton) { + ((AbstractCommandButton) o).setEnabled(enabled); + } else if (o instanceof RibbonApplicationMenuEntryPrimary) { + ((RibbonApplicationMenuEntryPrimary) o).setEnabled(enabled); + } else if (o instanceof RibbonApplicationMenuEntryFooter) { + ((RibbonApplicationMenuEntryFooter) o).setEnabled(enabled); + } else if (o instanceof JComponent) { + ((JComponent) o).setEnabled(enabled); + } else { + throw new IllegalArgumentException("Cannot set enabled to: " + path); + } + } catch (Exception ex) { + //some substance issues, ignore } } @@ -594,7 +598,11 @@ public class MainFrameRibbonMenu extends MainFrameMenu { @Override public void run() { - ribbon.setVisible(rg, val); + try { + ribbon.setVisible(rg, val); + } catch (Exception ex) { + + } } }); diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 30e09eb27..b105367b4 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -142,6 +142,7 @@ import com.jpexs.decompiler.flash.types.MATRIX; import com.jpexs.decompiler.flash.types.RECT; import com.jpexs.decompiler.flash.types.sound.SoundFormat; import com.jpexs.decompiler.flash.xfl.FLAVersion; +import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.helpers.CancellableWorker; import com.jpexs.helpers.Helper; import com.jpexs.helpers.Path; @@ -320,6 +321,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se private static final Logger logger = Logger.getLogger(MainPanel.class.getName()); + private Map asms = new HashMap<>(); + public void setPercent(int percent) { progressBar.setValue(percent); progressBar.setVisible(true); @@ -816,6 +819,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se mainFrame.setTitle(ApplicationInfo.applicationVerName + (Configuration.displayFileName.get() ? " - " + swf.getFileTitle() : "")); List abcList = swf.getAbcList(); + asms = swf.getASMs(true); boolean hasAbc = !abcList.isEmpty(); @@ -1533,9 +1537,11 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void gotoClassLine(SWF swf, String cls, int line) { - gotoClass(swf, cls); + gotoScriptName(swf, cls); if (abcPanel != null) { abcPanel.decompiledTextArea.gotoLine(line); + } else if (actionPanel != null) { + actionPanel.decompiledEditor.gotoLine(line); } refreshBreakPoints(); @@ -1561,15 +1567,21 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se }*/ - public void gotoClass(SWF swf, String cls) { + public void gotoScriptName(SWF swf, String scriptName) { if (swf == null) { return; } - List abcList = swf.getAbcList(); - if (!abcList.isEmpty()) { - ABCPanel abcPanel = getABCPanel(); - abcPanel.setAbc(abcList.get(0).getABC()); - abcPanel.hilightScript(swf, cls); + if (swf.isAS3()) { + List abcList = swf.getAbcList(); + if (!abcList.isEmpty()) { + ABCPanel abcPanel = getABCPanel(); + abcPanel.setAbc(abcList.get(0).getABC()); + abcPanel.hilightScript(swf, scriptName); + } + } else { + if (actionPanel != null && asms.containsKey(scriptName)) { + actionPanel.setSource(asms.get(scriptName), true); + } } } @@ -1583,8 +1595,13 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se List abcList = swf.getAbcList(); if (!abcList.isEmpty()) { ABCPanel abcPanel = getABCPanel(); - abcPanel.setAbc(abcList.get(0).getABC()); - abcPanel.hilightScript(swf, documentClass); + for (ABCContainerTag c : abcList) { + if (c.getABC().findClassByName(documentClass) > -1) { + abcPanel.setAbc(c.getABC()); + abcPanel.hilightScript(swf, documentClass); + break; + } + } } } } @@ -2823,6 +2840,9 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se if (abcPanel != null) { abcPanel.decompiledTextArea.removeColorMarkerOnAllLines(DecompiledEditorPane.FG_IP_COLOR, DecompiledEditorPane.BG_IP_COLOR, DecompiledEditorPane.PRIORITY_IP); } + if (actionPanel != null) { + actionPanel.decompiledEditor.removeColorMarkerOnAllLines(DecompiledEditorPane.FG_IP_COLOR, DecompiledEditorPane.BG_IP_COLOR, DecompiledEditorPane.PRIORITY_IP); + } } private void stopFlashPlayer() { @@ -3050,7 +3070,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se setSourceWorker.cancel(true); setSourceWorker = null; } - if (!Main.isWorking() || Main.isDebugging()) { + if (!Main.isInited() || !Main.isWorking() || Main.isDebugging()) { CancellableWorker worker = new CancellableWorker() { @Override diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index ce3f530a9..dabb36861 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.gui.abc; +import com.jpexs.decompiler.flash.gui.DebugPanel; import com.jpexs.debugger.flash.Variable; import com.jpexs.debugger.flash.messages.in.InBreakAtExt; import com.jpexs.debugger.flash.messages.in.InBreakReason; diff --git a/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java b/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java index 286711dd1..4cbba59c0 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java @@ -38,6 +38,7 @@ import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.flash.gui.AppStrings; import com.jpexs.decompiler.flash.gui.Main; import com.jpexs.decompiler.flash.gui.View; +import com.jpexs.decompiler.flash.gui.editor.DebuggableEditorPane; import com.jpexs.decompiler.flash.gui.editor.LineMarkedEditorPane; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.hilight.HighlightData; @@ -59,7 +60,7 @@ import jsyntaxpane.Token; import jsyntaxpane.TokenType; import jsyntaxpane.components.BreakPointListener; -public class DecompiledEditorPane extends LineMarkedEditorPane implements CaretListener, BreakPointListener { +public class DecompiledEditorPane extends DebuggableEditorPane implements CaretListener { private List highlights = new ArrayList<>(); @@ -91,34 +92,6 @@ public class DecompiledEditorPane extends LineMarkedEditorPane implements CaretL private final List scriptListeners = new ArrayList<>(); - public static final Color BG_BREAKPOINT_COLOR = new Color(0xfc, 0x9d, 0x9f); - public static final Color FG_BREAKPOINT_COLOR = null; - public static final int PRIORITY_BREAKPOINT = 20; - - public static final Color BG_IP_COLOR = new Color(0xbd, 0xe6, 0xaa); - public static final Color FG_IP_COLOR = null; - public static final int PRIORITY_IP = 0; - - public static final Color BG_INVALID_BREAKPOINT_COLOR = new Color(0xdc, 0xdc, 0xd8); - public static final Color FG_INVALID_BREAKPOINT_COLOR = null; - public static final int PRIORITY_INVALID_BREAKPOINT = 10; - - @Override - public void toggled(int line) { - boolean on = Main.toggleBreakPoint(script, line); - removeColorMarker(line, FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); - if (on) { - if (Main.isBreakPointValid(script, line)) { - addColorMarker(line, FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT); - } else { - addColorMarker(line, FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); - } - } else { - removeColorMarker(line, FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT); - removeColorMarker(line, FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); - } - } - public void addScriptListener(Runnable l) { scriptListeners.add(l); } @@ -676,14 +649,16 @@ public class DecompiledEditorPane extends LineMarkedEditorPane implements CaretL if (!force && this.script == scriptLeaf) { return; } - abcPanel.scriptNameLabel.setText(scriptLeaf.getClassPath().toString()); + String sn = scriptLeaf.getClassPath().toString(); + setScriptName(sn); + abcPanel.scriptNameLabel.setText(sn); int scriptIndex = scriptLeaf.scriptIndex; - ScriptInfo script = null; + ScriptInfo nscript = null; ABC abc = scriptLeaf.abc; if (scriptIndex > -1) { - script = abc.script_info.get(scriptIndex); + nscript = abc.script_info.get(scriptIndex); } - if (script == null) { + if (nscript == null) { highlights = new ArrayList<>(); specialHighlights = new ArrayList<>(); traitHighlights = new ArrayList<>(); @@ -738,36 +713,9 @@ public class DecompiledEditorPane extends LineMarkedEditorPane implements CaretL return script == null ? null : script.abc; } - public void refreshMarkers() { - removeColorMarkerOnAllLines(FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT); - removeColorMarkerOnAllLines(FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); - removeColorMarkerOnAllLines(FG_IP_COLOR, BG_IP_COLOR, PRIORITY_IP); - - if (script == null) { - return; - } - - Set bkptLines = Main.getPackBreakPoints(script); - - for (int line : bkptLines) { - if (Main.isBreakPointValid(script, line)) { - addColorMarker(line, FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT); - } else { - addColorMarker(line, FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); - } - } - int ip = Main.getIp(script); - ClassPath ipPath = Main.getIpClass(); - if (ip > 0 && ipPath != null && ipPath.equals(script.getClassPath())) { - addColorMarker(ip, FG_IP_COLOR, BG_IP_COLOR, PRIORITY_IP); - } - } - @Override public void setText(String t) { super.setText(t); setCaretPosition(0); - refreshMarkers(); - } } diff --git a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java index f1671e7e4..ba2a1b78d 100644 --- a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.gui.action; import com.jpexs.decompiler.flash.DisassemblyListener; import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.abc.ClassPath; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.ActionGraph; import com.jpexs.decompiler.flash.action.ActionList; @@ -34,6 +35,7 @@ import com.jpexs.decompiler.flash.action.swf4.ConstantIndex; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; import com.jpexs.decompiler.flash.gui.AppStrings; +import com.jpexs.decompiler.flash.gui.DebuggerHandler; import com.jpexs.decompiler.flash.gui.GraphDialog; import com.jpexs.decompiler.flash.gui.HeaderLabel; import com.jpexs.decompiler.flash.gui.Main; @@ -42,8 +44,19 @@ import com.jpexs.decompiler.flash.gui.SearchListener; import com.jpexs.decompiler.flash.gui.SearchPanel; import com.jpexs.decompiler.flash.gui.TagEditorPanel; import com.jpexs.decompiler.flash.gui.View; +import com.jpexs.decompiler.flash.gui.DebugPanel; +import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.BG_BREAKPOINT_COLOR; +import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.BG_INVALID_BREAKPOINT_COLOR; +import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.BG_IP_COLOR; +import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.FG_BREAKPOINT_COLOR; +import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.FG_INVALID_BREAKPOINT_COLOR; +import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.FG_IP_COLOR; +import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.PRIORITY_BREAKPOINT; +import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.PRIORITY_INVALID_BREAKPOINT; +import static com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane.PRIORITY_IP; import com.jpexs.decompiler.flash.gui.controls.JPersistentSplitPane; import com.jpexs.decompiler.flash.gui.controls.NoneSelectedButtonGroup; +import com.jpexs.decompiler.flash.gui.editor.DebuggableEditorPane; import com.jpexs.decompiler.flash.gui.editor.LineMarkedEditorPane; import com.jpexs.decompiler.flash.gui.tagtree.TagTreeModel; import com.jpexs.decompiler.flash.helpers.HighlightedText; @@ -66,6 +79,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.concurrent.CancellationException; import java.util.logging.Level; import java.util.logging.Logger; @@ -96,7 +110,7 @@ public class ActionPanel extends JPanel implements SearchListener bkptLines = Main.getScriptBreakPoints(sc); + + for (int line : bkptLines) { + if (Main.isBreakPointValid(lastASM, line)) { + decompiledEditor.addColorMarker(line, FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT); + } else { + decompiledEditor.addColorMarker(line, FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); + } + } + int ip = Main.getIp(lastASM); + String ipPath = Main.getIpClass(); + if (ip > 0 && ipPath != null && lastASM.getSwf().getASMs(false).get(ipPath) == lastASM) { + decompiledEditor.addColorMarker(ip, FG_IP_COLOR, BG_IP_COLOR, PRIORITY_IP); + } + }*/ public String getStringUnderCursor() { int pos = decompiledEditor.getCaretPosition(); @@ -206,7 +240,7 @@ public class ActionPanel extends JPanel implements SearchListener h.getProperties().offset) { + if (ins.getOffset() > h.getProperties().offset && lastIns != null) { inspos = (int) (h.getProperties().offset - lastIns.getAddress()); selIns = lastIns; break; @@ -274,9 +308,10 @@ public class ActionPanel extends JPanel implements SearchListener { ignoreCarret = true; + decompiledEditor.setScriptName(scriptName); decompiledEditor.setText(text); ignoreCarret = false; }); @@ -415,12 +450,13 @@ public class ActionPanel extends JPanel implements SearchListener { setSourceWorker = null; - Main.stopWork(); + if (!Main.isDebugging()) { + Main.stopWork(); + } try { get(); } catch (CancellationException ex) { setEditorText("; " + AppStrings.translate("work.canceled"), "text/flasm"); } catch (Exception ex) { - setDecompiledText("// " + AppStrings.translate("decompilationError") + ": " + ex); + setDecompiledText("-", "// " + AppStrings.translate("decompilationError") + ": " + ex); } }); } }; worker.execute(); setSourceWorker = worker; - Main.startWork(AppStrings.translate("work.decompiling") + "...", worker); + if (!Main.isDebugging()) { + Main.startWork(AppStrings.translate("work.decompiling") + "...", worker); + } } public void hilightOffset(long offset) { @@ -477,7 +518,7 @@ public class ActionPanel extends JPanel implements SearchListener(new FlowLayout(), this); @@ -570,15 +611,37 @@ public class ActionPanel extends JPanel implements SearchListener { + if (val) { + if (hexOnlyButton.isSelected()) { + setHex(ScriptExportMode.HEX); + } else if (constantsViewButton.isSelected()) { + setHex(ScriptExportMode.CONSTANTS); + } else { + setHex(ScriptExportMode.PCODE); + } } - } - editor.setEditable(val); - saveButton.setVisible(val); - saveButton.setEnabled(false); - editButton.setVisible(!val); - cancelButton.setVisible(val); + editor.setEditable(val); + saveButton.setVisible(val); + saveButton.setEnabled(false); + editButton.setVisible(!val); + cancelButton.setVisible(val); - editor.getCaret().setVisible(true); - asmLabel.setIcon(val ? View.getIcon("editing16") : null); // this line is not working - topButtonsPan.setVisible(!val); - editMode = val; - editor.requestFocusInWindow(); + editor.getCaret().setVisible(true); + asmLabel.setIcon(val ? View.getIcon("editing16") : null); // this line is not working + topButtonsPan.setVisible(!val); + editMode = val; + editor.requestFocusInWindow(); + }); } public void setDecompiledEditMode(boolean val) { if (lastASM == null) { return; } - - int lastLine = decompiledEditor.getLine(); - int prefLines = lastASM.getPrefixLineCount(); - if (val) { - String newText = lastASM.removePrefixAndSuffix(lastDecompiled); - setDecompiledText(newText); - if (lastLine > -1) { - if (lastLine - prefLines >= 0) { - decompiledEditor.gotoLine(lastLine - prefLines + 1); + View.execInEventDispatch(() -> { + int lastLine = decompiledEditor.getLine(); + int prefLines = lastASM.getPrefixLineCount(); + if (val) { + String newText = lastASM.removePrefixAndSuffix(lastDecompiled); + setDecompiledText(lastASM.getScriptName(), newText); + if (lastLine > -1) { + if (lastLine - prefLines >= 0) { + decompiledEditor.gotoLine(lastLine - prefLines + 1); + } + } + } else { + String newText = lastDecompiled; + setDecompiledText(lastASM.getScriptName(), newText); + if (lastLine > -1) { + decompiledEditor.gotoLine(lastLine + prefLines + 1); } } - } else { - String newText = lastDecompiled; - setDecompiledText(newText); - if (lastLine > -1) { - decompiledEditor.gotoLine(lastLine + prefLines + 1); - } - } - decompiledEditor.setEditable(val); - saveDecompiledButton.setVisible(val); - saveDecompiledButton.setEnabled(false); - editDecompiledButton.setVisible(!val); - experimentalLabel.setVisible(!val); - cancelDecompiledButton.setVisible(val); + decompiledEditor.setEditable(val); + saveDecompiledButton.setVisible(val); + saveDecompiledButton.setEnabled(false); + editDecompiledButton.setVisible(!val); + experimentalLabel.setVisible(!val); + cancelDecompiledButton.setVisible(val); - decompiledEditor.getCaret().setVisible(true); - decLabel.setIcon(val ? View.getIcon("editing16") : null); - editDecompiledMode = val; - decompiledEditor.requestFocusInWindow(); + decompiledEditor.getCaret().setVisible(true); + decLabel.setIcon(val ? View.getIcon("editing16") : null); + editDecompiledMode = val; + decompiledEditor.requestFocusInWindow(); + }); } private void graphButtonActionPerformed(ActionEvent evt) { diff --git a/src/com/jpexs/decompiler/flash/gui/editor/DebuggableEditorPane.java b/src/com/jpexs/decompiler/flash/gui/editor/DebuggableEditorPane.java new file mode 100644 index 000000000..29763fea9 --- /dev/null +++ b/src/com/jpexs/decompiler/flash/gui/editor/DebuggableEditorPane.java @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2015 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.gui.editor; + +import com.jpexs.decompiler.flash.gui.Main; +import java.awt.Color; +import java.util.Set; +import jsyntaxpane.components.BreakPointListener; + +/** + * + * @author JPEXS + */ +public class DebuggableEditorPane extends LineMarkedEditorPane implements BreakPointListener { + + public static final Color BG_BREAKPOINT_COLOR = new Color(0xfc, 0x9d, 0x9f); + public static final Color FG_BREAKPOINT_COLOR = null; + public static final int PRIORITY_BREAKPOINT = 20; + + public static final Color BG_IP_COLOR = new Color(0xbd, 0xe6, 0xaa); + public static final Color FG_IP_COLOR = null; + public static final int PRIORITY_IP = 0; + + public static final Color BG_INVALID_BREAKPOINT_COLOR = new Color(0xdc, 0xdc, 0xd8); + public static final Color FG_INVALID_BREAKPOINT_COLOR = null; + public static final int PRIORITY_INVALID_BREAKPOINT = 10; + + protected String scriptName = null; + + public synchronized void setScriptName(String scriptName) { + this.scriptName = scriptName; + } + + @Override + public synchronized void toggled(int line) { + if (scriptName == null) { + return; + } + boolean on = Main.toggleBreakPoint(scriptName, line); + removeColorMarker(line, FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); + if (on) { + if (Main.isBreakPointValid(scriptName, line)) { + addColorMarker(line, FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT); + } else { + addColorMarker(line, FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); + } + } else { + removeColorMarker(line, FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT); + removeColorMarker(line, FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); + } + } + + public synchronized void refreshMarkers() { + removeColorMarkerOnAllLines(FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT); + removeColorMarkerOnAllLines(FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); + removeColorMarkerOnAllLines(FG_IP_COLOR, BG_IP_COLOR, PRIORITY_IP); + + if (scriptName == null) { + return; + } + + Set bkptLines = Main.getScriptBreakPoints(scriptName); + + for (int line : bkptLines) { + if (Main.isBreakPointValid(scriptName, line)) { + addColorMarker(line, FG_BREAKPOINT_COLOR, BG_BREAKPOINT_COLOR, PRIORITY_BREAKPOINT); + } else { + addColorMarker(line, FG_INVALID_BREAKPOINT_COLOR, BG_INVALID_BREAKPOINT_COLOR, PRIORITY_INVALID_BREAKPOINT); + } + } + int ip = Main.getIp(scriptName); + String ipPath = Main.getIpClass(); + if (ip > 0 && ipPath != null && ipPath.equals(scriptName)) { + addColorMarker(ip, FG_IP_COLOR, BG_IP_COLOR, PRIORITY_IP); + } + } + + @Override + public void setText(String t) { + super.setText(t); + refreshMarkers(); + } + + public String getScriptName() { + return scriptName; + } + +} diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties index f8039e4ec..0670dc8ea 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties @@ -678,4 +678,17 @@ work.breakat = Breat at\u0020 work.halted = Debugging started, execution halted. Add breakpoints and click Continue (F5) to resume running. debuglog.header = Log -debuglog.button.clear = Clear \ No newline at end of file +debuglog.button.clear = Clear + +work.debugging.wait = Waiting for Flash debug projector to connect + +error.debug.listen = Cannot listen on port %port%. There might be other flash debugger running. + +debug.break.reason.unknown = (Unknown) +debug.break.reason.breakpoint = (Breakpoint) +debug.break.reason.watch = (Watch) +debug.break.reason.fault = (Fault) +debug.break.reason.stopRequest = (Stop request) +debug.break.reason.step = (Step) +debug.break.reason.halt = (Halt) +debug.break.reason.scriptLoaded = (Script loaded) \ No newline at end of file diff --git a/test/com/jpexs/decompiler/flash/gui/FlashPlayerTest.java b/test/com/jpexs/decompiler/flash/gui/FlashPlayerTest.java index ee1141ddf..16ed58c8a 100644 --- a/test/com/jpexs/decompiler/flash/gui/FlashPlayerTest.java +++ b/test/com/jpexs/decompiler/flash/gui/FlashPlayerTest.java @@ -84,6 +84,7 @@ import java.util.Random; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; +import org.testng.annotations.Test; /** *