Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Khouzam2016-10-17 11:10:26 -0400
committerJonah Graham2016-11-04 06:21:52 -0400
commitc7526e8a04a421fcd051d9c4b99a114060e3dd08 (patch)
tree48cc86e34710f5dc6eae482fce2cb45e7bfa3d16
parent6c4576281d6f15f14016b826b7c36d025264b9de (diff)
downloadorg.eclipse.cdt-c7526e8a04a421fcd051d9c4b99a114060e3dd08.tar.gz
org.eclipse.cdt-c7526e8a04a421fcd051d9c4b99a114060e3dd08.tar.xz
org.eclipse.cdt-c7526e8a04a421fcd051d9c4b99a114060e3dd08.zip
Hide 'gdb traces' by default.
Since users don't usually care about seeing the communication between CDT and GDB, we should not show it by default. However, once a problem happens it would be nice to be able to look at the traces even if they were previously hidden. This patch has the gdb traces always enabled, but hides the actual console from the user. When the user enables the traces, they will be shown in the Console view, with all previous traces available. Change-Id: Ifd312aa19e4421b6764169b6199b5e935cf25f87
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/TracingConsole.java2
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/TracingConsoleManager.java90
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/preferences/GdbDebugPreferencePage.java34
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/preferences/MessagesForPreferences.properties2
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/internal/GdbPreferenceInitializer.java2
5 files changed, 65 insertions, 65 deletions
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/TracingConsole.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/TracingConsole.java
index a60cab216f..5da677eee6 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/TracingConsole.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/TracingConsole.java
@@ -50,7 +50,7 @@ public class TracingConsole extends IOConsole {
private String fLabel = ""; //$NON-NLS-1$
public TracingConsole(ILaunch launch, String label) {
- super("", null, null, true); //$NON-NLS-1$
+ super("", null, null, false); //$NON-NLS-1$
fLaunch = launch;
fTracingStream = newOutputStream();
fSession = ((GdbLaunch)launch).getSession();
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/TracingConsoleManager.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/TracingConsoleManager.java
index 6a6d4c5a72..10a10d896f 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/TracingConsoleManager.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/TracingConsoleManager.java
@@ -10,6 +10,8 @@
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.internal.ui.console;
+import java.util.HashMap;
+
import org.eclipse.cdt.dsf.gdb.IGdbDebugPreferenceConstants;
import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin;
import org.eclipse.cdt.dsf.gdb.launching.ITracedLaunch;
@@ -21,11 +23,12 @@ import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
-import org.eclipse.ui.console.IConsoleManager;
/**
* A tracing console manager which adds and removes tracing consoles
* based on launch events and preference events.
+ * TracingConsoles are always running but are only shown in the console
+ * view if enabled by the user preference.
*
* @since 2.1
* This class was moved from package org.eclipse.cdt.dsf.gdb.internal.ui.tracing
@@ -62,6 +65,13 @@ public class TracingConsoleManager implements ILaunchesListener2, IPropertyChang
private int fMinNumCharacters = fMaxNumCharacters - NUMBER_OF_CHARS_TO_DELETE;
/**
+ * A map of all TracingConsoles for their corresponding launch.
+ * We keep this list because TracingConsoles may not be registered
+ * with the ConsoleManager, so we need another way to find them.
+ */
+ private HashMap<ITracedLaunch, TracingConsole> fTracingConsoles = new HashMap<>();
+
+ /**
* Start the tracing console. We don't do this in a constructor, because
* we need to use <code>this</code>.
*/
@@ -73,9 +83,7 @@ public class TracingConsoleManager implements ILaunchesListener2, IPropertyChang
int maxChars = store.getInt(IGdbDebugPreferenceConstants.PREF_MAX_GDB_TRACES);
setWaterMarks(maxChars);
- if (fTracingEnabled) {
- toggleTracing(true);
- }
+ DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this);
}
public void shutdown() {
@@ -84,23 +92,16 @@ public class TracingConsoleManager implements ILaunchesListener2, IPropertyChang
removeAllConsoles();
}
- protected void toggleTracing(boolean enabled) {
- if (enabled) {
- DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this);
- addAllConsoles();
+ protected void toggleTracingVisibility(boolean visible) {
+ if (visible) {
+ ConsolePlugin.getDefault().getConsoleManager().addConsoles(
+ fTracingConsoles.values().toArray(new IConsole[fTracingConsoles.size()]));
} else {
- DebugPlugin.getDefault().getLaunchManager().removeLaunchListener(this);
- removeAllConsoles();
+ ConsolePlugin.getDefault().getConsoleManager().removeConsoles(
+ fTracingConsoles.values().toArray(new IConsole[fTracingConsoles.size()]));
}
}
- protected void addAllConsoles() {
- ILaunch[] launches = DebugPlugin.getDefault().getLaunchManager().getLaunches();
- for (ILaunch launch : launches) {
- addConsole(launch);
- }
- }
-
protected void removeAllConsoles() {
ILaunch[] launches = DebugPlugin.getDefault().getLaunchManager().getLaunches();
for (ILaunch launch : launches) {
@@ -139,12 +140,11 @@ public class TracingConsoleManager implements ILaunchesListener2, IPropertyChang
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(IGdbDebugPreferenceConstants.PREF_TRACES_ENABLE)) {
fTracingEnabled = (Boolean)event.getNewValue();
- toggleTracing(fTracingEnabled);
+ toggleTracingVisibility(fTracingEnabled);
} else if (event.getProperty().equals(IGdbDebugPreferenceConstants.PREF_MAX_GDB_TRACES)) {
int maxChars = (Integer)event.getNewValue();
updateAllConsoleWaterMarks(maxChars);
}
-
}
protected void addConsole(ILaunch launch) {
@@ -152,50 +152,40 @@ public class TracingConsoleManager implements ILaunchesListener2, IPropertyChang
if (launch instanceof ITracedLaunch) {
// Make sure we didn't already add this console
if (getConsole(launch) == null) {
- if (launch.isTerminated() == false) {
- // Create and new tracing console.
+ if (!launch.isTerminated()) {
+ // Create a new tracing console.
TracingConsole console = new TracingConsole(launch, ConsoleMessages.ConsoleMessages_trace_console_name);
+ console.initialize();
console.setWaterMarks(fMinNumCharacters, fMaxNumCharacters);
- ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[]{console});
+
+ fTracingConsoles.put((ITracedLaunch)launch, console);
+ if (fTracingEnabled) {
+ ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[]{console});
+ }
} // else we don't display a new console for a terminated launch
}
}
}
protected void removeConsole(ILaunch launch) {
- if (launch instanceof ITracedLaunch) {
- TracingConsole console = getConsole(launch);
- if (console != null) {
+ TracingConsole console = fTracingConsoles.remove(launch);
+ if (console != null) {
+ console.destroy();
+ if (fTracingEnabled) {
ConsolePlugin.getDefault().getConsoleManager().removeConsoles(new IConsole[]{console});
}
}
}
protected void renameConsole(ILaunch launch) {
- if (launch instanceof ITracedLaunch) {
- TracingConsole console = getConsole(launch);
- if (console != null) {
- console.resetName();
- }
+ TracingConsole console = getConsole(launch);
+ if (console != null) {
+ console.resetName();
}
}
private TracingConsole getConsole(ILaunch launch) {
- ConsolePlugin plugin = ConsolePlugin.getDefault();
- if (plugin != null) {
- // I've seen the plugin be null when running headless JUnit tests
- IConsoleManager manager = plugin.getConsoleManager();
- IConsole[] consoles = manager.getConsoles();
- for (IConsole console : consoles) {
- if (console instanceof TracingConsole) {
- TracingConsole tracingConsole = (TracingConsole)console;
- if (tracingConsole.getLaunch().equals(launch)) {
- return tracingConsole;
- }
- }
- }
- }
- return null;
+ return fTracingConsoles.get(launch);
}
/** @since 2.2 */
@@ -224,11 +214,9 @@ public class TracingConsoleManager implements ILaunchesListener2, IPropertyChang
/** @since 2.2 */
protected void updateConsoleWaterMarks(ILaunch launch) {
- if (launch instanceof ITracedLaunch) {
- TracingConsole console = getConsole(launch);
- if (console != null) {
- console.setWaterMarks(fMinNumCharacters, fMaxNumCharacters);
- }
- }
+ TracingConsole console = getConsole(launch);
+ if (console != null) {
+ console.setWaterMarks(fMinNumCharacters, fMaxNumCharacters);
+ }
}
}
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/preferences/GdbDebugPreferencePage.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/preferences/GdbDebugPreferencePage.java
index de8542a0de..723047b3e8 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/preferences/GdbDebugPreferencePage.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/preferences/GdbDebugPreferencePage.java
@@ -233,9 +233,6 @@ public class GdbDebugPreferencePage extends FieldEditorPreferencePage implements
}
}
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
- */
@Override
protected Control createDialogArea( Composite parent ) {
getShell().setText( MessagesForPreferences.GdbDebugPreferencePage_Advanced_Timeout_Settings );
@@ -661,16 +658,34 @@ public class GdbDebugPreferencePage extends FieldEditorPreferencePage implements
// Need to set layout again.
group2.setLayout(groupLayout);
- final IntegerWithBooleanFieldEditor enableGdbTracesField = new IntegerWithBooleanFieldEditor(
+ boolField= new BooleanFieldEditor(
IGdbDebugPreferenceConstants.PREF_TRACES_ENABLE,
- IGdbDebugPreferenceConstants.PREF_MAX_GDB_TRACES,
MessagesForPreferences.GdbDebugPreferencePage_enableTraces_label,
group2);
+
+ boolField.fillIntoGrid(group2, 1);
+ addField(boolField);
+ group2.setLayout(groupLayout);
+
+ // The field below sets the size of the buffer for the gdb traces.
+ // It is located to the right of the previous field (which shows or not the
+ // gdb traces) and uses its label. However, we don't want to tightly
+ // couple the two fields using IntegerWithBooleanFieldEditor because
+ // we want the gdb traces limit to stay enabled even when the gdb traces
+ // are not actually shown (when the above preference is not selected).
+ // The reason is that since the gdb traces record even when they are not
+ // shown, we want the user to be able to set the limit on those consoles,
+ // even if they are not currently shown.
+ final IntegerFieldEditor gdbTracesLimit = new IntegerFieldEditor(
+ IGdbDebugPreferenceConstants.PREF_MAX_GDB_TRACES,
+ "", // Empty title as we reuse the string of the previous field //$NON-NLS-1$
+ group2);
+
// Instead of using Integer.MAX_VALUE which is some obscure number,
// using 2 billion is nice and readable.
- enableGdbTracesField.setValidRange(10000, 2000000000);
- enableGdbTracesField.fillIntoGrid(group2, 2);
- addField(enableGdbTracesField);
+ gdbTracesLimit.setValidRange(10000, 2000000000);
+ gdbTracesLimit.fillIntoGrid(group2, 2);
+ addField(gdbTracesLimit);
// Need to set layout again.
group2.setLayout(groupLayout);
@@ -781,9 +796,6 @@ public class GdbDebugPreferencePage extends FieldEditorPreferencePage implements
updateTimeoutButtons();
}
- /* (non-Javadoc)
- * @see org.eclipse.jface.preference.FieldEditorPreferencePage#performOk()
- */
@Override
public boolean performOk() {
getPreferenceStore().setValue( IGdbDebugPreferenceConstants.PREF_COMMAND_CUSTOM_TIMEOUTS, fCustomTimeouts.getMemento() );
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/preferences/MessagesForPreferences.properties b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/preferences/MessagesForPreferences.properties
index ae219d7e35..6e0e60d243 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/preferences/MessagesForPreferences.properties
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/preferences/MessagesForPreferences.properties
@@ -18,7 +18,7 @@ GdbDebugPreferencePage_Add_button=Add
GdbDebugPreferencePage_description=General settings for GDB Debugging
GdbDebugPreferencePage_general_behavior_label=General Behavior
-GdbDebugPreferencePage_enableTraces_label=Enable GDB traces with character limit:
+GdbDebugPreferencePage_enableTraces_label=Show the GDB traces consoles with character limit:
GdbDebugPreferencePage_autoTerminateGdb_label=Terminate GDB when last process exits
GdbDebugPreferencePage_Command_column_name=GDB/MI Command
GdbDebugPreferencePage_Command_field_can_not_be_empty='Command' field can not be empty
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/internal/GdbPreferenceInitializer.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/internal/GdbPreferenceInitializer.java
index 5565c70947..4ca61a23b2 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/internal/GdbPreferenceInitializer.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/internal/GdbPreferenceInitializer.java
@@ -30,7 +30,7 @@ public class GdbPreferenceInitializer extends AbstractPreferenceInitializer {
@Override
public void initializeDefaultPreferences() {
IEclipsePreferences node = DefaultScope.INSTANCE.getNode(GdbPlugin.PLUGIN_ID);
- node.putBoolean(IGdbDebugPreferenceConstants.PREF_TRACES_ENABLE, true);
+ node.putBoolean(IGdbDebugPreferenceConstants.PREF_TRACES_ENABLE, false);
node.putInt(IGdbDebugPreferenceConstants.PREF_MAX_GDB_TRACES, 500000);
node.putBoolean(IGdbDebugPreferenceConstants.PREF_AUTO_TERMINATE_GDB, true);
node.putBoolean(IGdbDebugPreferenceConstants.PREF_USE_INSPECTOR_HOVER, true);

Back to the top