Issue #707 Debugger for logging messages

This commit is contained in:
Jindra Petřík
2014-10-28 15:57:31 +01:00
parent 9a5361e8e3
commit 2746f3bc32
49 changed files with 1351 additions and 28 deletions

View File

@@ -93,6 +93,9 @@ public class MainFrameRibbonMenu implements MainFrameMenu, ActionListener {
static final String ACTION_TIMELINE = "TIMELINE";
static final String ACTION_AUTO_DEOBFUSCATE = "AUTODEOBFUSCATE";
static final String ACTION_EXIT = "EXIT";
static final String ACTION_DEBUGGER_SWITCH = "DEBUGGER_SWITCH";
static final String ACTION_DEBUGGER_REPLACE_TRACE = "DEBUGGER_REPLACE_TRACE";
static final String ACTION_DEBUGGER_LOG = "DEBUGGER_LOG";
static final String ACTION_RENAME_ONE_IDENTIFIER = "RENAMEONEIDENTIFIER";
static final String ACTION_ABOUT = "ABOUT";
@@ -158,6 +161,10 @@ public class MainFrameRibbonMenu implements MainFrameMenu, ActionListener {
private CommandToggleButtonGroup timeLineToggleGroup;
private JCommandButton gotoDocumentClassCommandButton;
private JCommandButton clearRecentFilesCommandButton;
private JCommandToggleButton debuggerSwitchCommandButton;
private CommandToggleButtonGroup debuggerSwitchGroup;
private JCommandButton debuggerReplaceTraceCommandButton;
private JCommandButton debuggerLogCommandButton;
private CommandToggleButtonGroup viewModeToggleGroup;
@@ -385,13 +392,43 @@ public class MainFrameRibbonMenu implements MainFrameMenu, ActionListener {
}
private RibbonTask createToolsRibbonTask() {
JRibbonBand debuggerBand = new JRibbonBand(translate("menu.debugger"), null);
debuggerBand.setResizePolicies(getResizePolicies(debuggerBand));
debuggerSwitchCommandButton = new JCommandToggleButton(translate("menu.debugger.switch"),View.getResizableIcon("debugger32"));
assignListener(debuggerSwitchCommandButton, ACTION_DEBUGGER_SWITCH);
//debuggerDetachCommandButton = new JCommandButton("Detach debugger",View.getResizableIcon("debuggerremove16"));
//assignListener(debuggerDetachCommandButton, ACTION_DEBUGGER_DETACH);
debuggerReplaceTraceCommandButton = new JCommandButton(translate("menu.debugger.replacetrace"), View.getResizableIcon("debuggerreplace16"));
assignListener(debuggerReplaceTraceCommandButton, ACTION_DEBUGGER_REPLACE_TRACE);
debuggerLogCommandButton = new JCommandButton(translate("menu.debugger.showlog"), View.getResizableIcon("debuggerlog16"));
assignListener(debuggerLogCommandButton, ACTION_DEBUGGER_LOG);
debuggerSwitchGroup = new CommandToggleButtonGroup();
debuggerSwitchGroup.add(debuggerSwitchCommandButton);
debuggerSwitchCommandButton.setEnabled(false);
debuggerReplaceTraceCommandButton.setEnabled(false);
debuggerBand.addCommandButton(debuggerSwitchCommandButton, RibbonElementPriority.TOP);
debuggerBand.addCommandButton(debuggerReplaceTraceCommandButton, RibbonElementPriority.MEDIUM);
debuggerBand.addCommandButton(debuggerLogCommandButton, RibbonElementPriority.MEDIUM);
//----------------------------------------- TOOLS -----------------------------------
JRibbonBand toolsBand = new JRibbonBand(translate("menu.tools"), null);
toolsBand.setResizePolicies(getResizePolicies(toolsBand));
searchCommandButton = new JCommandButton(fixCommandTitle(translate("menu.tools.search")), View.getResizableIcon("search32"));
assignListener(searchCommandButton, ACTION_SEARCH);
assignListener(searchCommandButton, ACTION_SEARCH);
timeLineToggleButton = new JCommandToggleButton(fixCommandTitle(translate("menu.tools.timeline")), View.getResizableIcon("timeline32"));
assignListener(timeLineToggleButton, ACTION_TIMELINE);
@@ -436,7 +473,7 @@ public class MainFrameRibbonMenu implements MainFrameMenu, ActionListener {
//JRibbonBand otherToolsBand = new JRibbonBand(translate("menu.tools.otherTools"), null);
//otherToolsBand.setResizePolicies(getResizePolicies(otherToolsBand));
return new RibbonTask(translate("menu.tools"), toolsBand, deobfuscationBand/*, otherToolsBand*/);
return new RibbonTask(translate("menu.tools"), toolsBand, deobfuscationBand, debuggerBand /*, otherToolsBand*/);
}
private RibbonTask createSettingsRibbonTask(boolean externalFlashPlayerUnavailable) {
@@ -598,7 +635,8 @@ public class MainFrameRibbonMenu implements MainFrameMenu, ActionListener {
public void updateComponents(SWF swf, List<ABCContainerTag> abcList) {
boolean swfLoaded = swf != null;
boolean hasAbc = swfLoaded && abcList != null && !abcList.isEmpty();
boolean hasDebugger = hasAbc && Main.hasDebugger(swf);
exportAllMenu.setEnabled(swfLoaded);
exportFlaMenu.setEnabled(swfLoaded);
exportSelMenu.setEnabled(swfLoaded);
@@ -625,6 +663,12 @@ public class MainFrameRibbonMenu implements MainFrameMenu, ActionListener {
gotoDocumentClassCommandButton.setEnabled(hasAbc);
deobfuscationCommandButton.setEnabled(hasAbc);
debuggerSwitchCommandButton.setEnabled(hasAbc);
debuggerSwitchGroup.setSelected(debuggerSwitchCommandButton, hasDebugger);
//debuggerSwitchCommandButton.
//debuggerDetachCommandButton.setEnabled(hasDebugger);
debuggerReplaceTraceCommandButton.setEnabled(hasAbc && hasDebugger);
}
private boolean saveAs(SWF swf, SaveFileMode mode) {
@@ -640,6 +684,28 @@ public class MainFrameRibbonMenu implements MainFrameMenu, ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
switch (e.getActionCommand()) {
case ACTION_DEBUGGER_SWITCH:
if(debuggerSwitchGroup.getSelected()==null || View.showConfirmDialog(mainFrame, translate("message.debugger"), translate("dialog.message.title"),JOptionPane.OK_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE, Configuration.displayDebuggerInfo,JOptionPane.OK_OPTION)==JOptionPane.OK_OPTION){
Main.switchDebugger();
mainFrame.panel.refreshDecompiled();
}else{
if(debuggerSwitchGroup.getSelected()==debuggerSwitchCommandButton){
debuggerSwitchGroup.setSelected(debuggerSwitchCommandButton, false);
}
}
debuggerReplaceTraceCommandButton.setEnabled(debuggerSwitchGroup.getSelected()==debuggerSwitchCommandButton);
break;
case ACTION_DEBUGGER_LOG:
Main.debuggerShowLog();
break;
case ACTION_DEBUGGER_REPLACE_TRACE:
ReplaceTraceDialog rtd = new ReplaceTraceDialog(mainFrame);
rtd.setVisible(true);
if(rtd.getResult()!=null){
Main.replaceTraceCalls(rtd.getResult());
mainFrame.panel.refreshDecompiled();
}
break;
case ACTION_RELOAD:
if (View.showConfirmDialog(null, translate("message.confirm.reload"), translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) {
Main.reloadApp();