mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-05 16:56:04 +02:00
Bug 335895: GDB Traces Console has infinite capacity
This commit is contained in:
parent
3bb812c2c1
commit
7eb8ffda2e
6 changed files with 79 additions and 12 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2009, 2010 Ericsson and others.
|
* Copyright (c) 2009, 2011 Ericsson and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -38,6 +38,17 @@ public class TracingConsoleManager implements ILaunchesListener2, IPropertyChang
|
||||||
*/
|
*/
|
||||||
private boolean fTracingEnabled = false;
|
private boolean fTracingEnabled = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The maximum number of characters that are allowed per console
|
||||||
|
*/
|
||||||
|
private int fMaxNumCharacters = 500000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The number of characters that will be kept in the console once we
|
||||||
|
* go over fMaxNumCharacters and that we must remove some characters
|
||||||
|
*/
|
||||||
|
private int fMinNumCharacters = 400000;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start the tracing console. We don't do this in a constructor, because
|
* Start the tracing console. We don't do this in a constructor, because
|
||||||
* we need to use <code>this</code>.
|
* we need to use <code>this</code>.
|
||||||
|
@ -47,6 +58,8 @@ public class TracingConsoleManager implements ILaunchesListener2, IPropertyChang
|
||||||
|
|
||||||
store.addPropertyChangeListener(this);
|
store.addPropertyChangeListener(this);
|
||||||
fTracingEnabled = store.getBoolean(IGdbDebugPreferenceConstants.PREF_TRACES_ENABLE);
|
fTracingEnabled = store.getBoolean(IGdbDebugPreferenceConstants.PREF_TRACES_ENABLE);
|
||||||
|
int maxChars = store.getInt(IGdbDebugPreferenceConstants.PREF_MAX_GDB_TRACES);
|
||||||
|
setWaterMarks(maxChars);
|
||||||
|
|
||||||
if (fTracingEnabled) {
|
if (fTracingEnabled) {
|
||||||
toggleTracing(true);
|
toggleTracing(true);
|
||||||
|
@ -110,7 +123,11 @@ public class TracingConsoleManager implements ILaunchesListener2, IPropertyChang
|
||||||
if (event.getProperty().equals(IGdbDebugPreferenceConstants.PREF_TRACES_ENABLE)) {
|
if (event.getProperty().equals(IGdbDebugPreferenceConstants.PREF_TRACES_ENABLE)) {
|
||||||
fTracingEnabled = (Boolean)event.getNewValue();
|
fTracingEnabled = (Boolean)event.getNewValue();
|
||||||
toggleTracing(fTracingEnabled);
|
toggleTracing(fTracingEnabled);
|
||||||
|
} else if (event.getProperty().equals(IGdbDebugPreferenceConstants.PREF_MAX_GDB_TRACES)) {
|
||||||
|
int maxChars = (Integer)event.getNewValue();
|
||||||
|
updateAllConsoleWaterMarks(maxChars);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void addConsole(ILaunch launch) {
|
protected void addConsole(ILaunch launch) {
|
||||||
|
@ -121,6 +138,7 @@ public class TracingConsoleManager implements ILaunchesListener2, IPropertyChang
|
||||||
if (launch.isTerminated() == false) {
|
if (launch.isTerminated() == false) {
|
||||||
// Create and new tracing console.
|
// Create and new tracing console.
|
||||||
TracingConsole console = new TracingConsole(launch, ConsoleMessages.ConsoleMessages_trace_console_name);
|
TracingConsole console = new TracingConsole(launch, ConsoleMessages.ConsoleMessages_trace_console_name);
|
||||||
|
console.setWaterMarks(fMinNumCharacters, fMaxNumCharacters);
|
||||||
ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[]{console});
|
ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[]{console});
|
||||||
} // else we don't display a new console for a terminated launch
|
} // else we don't display a new console for a terminated launch
|
||||||
}
|
}
|
||||||
|
@ -162,4 +180,33 @@ public class TracingConsoleManager implements ILaunchesListener2, IPropertyChang
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @since 2.2 */
|
||||||
|
protected void setWaterMarks(int maxChars) {
|
||||||
|
if (maxChars < 10000) maxChars = 10000;
|
||||||
|
|
||||||
|
fMaxNumCharacters = maxChars;
|
||||||
|
// If the max number of chars is anything below 105000, we only keep 5000 once we truncate.
|
||||||
|
// If the max number of chars is bigger than 105000, we truncate 100000 chars.
|
||||||
|
fMinNumCharacters = maxChars < 105000 ? 5000 : maxChars - 100000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @since 2.2 */
|
||||||
|
protected void updateAllConsoleWaterMarks(int maxChars) {
|
||||||
|
setWaterMarks(maxChars);
|
||||||
|
ILaunch[] launches = DebugPlugin.getDefault().getLaunchManager().getLaunches();
|
||||||
|
for (ILaunch launch : launches) {
|
||||||
|
updateConsoleWaterMarks(launch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @since 2.2 */
|
||||||
|
protected void updateConsoleWaterMarks(ILaunch launch) {
|
||||||
|
if (launch instanceof ITracedLaunch) {
|
||||||
|
TracingConsole console = getConsole(launch);
|
||||||
|
if (console != null) {
|
||||||
|
console.setWaterMarks(fMinNumCharacters, fMaxNumCharacters);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2009, 2010 Ericsson and others.
|
* Copyright (c) 2009, 2011 Ericsson and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -137,6 +137,17 @@ public class GdbDebugPreferencePage extends FieldEditorPreferencePage implements
|
||||||
|
|
||||||
boolField.fillIntoGrid(group, 3);
|
boolField.fillIntoGrid(group, 3);
|
||||||
addField(boolField);
|
addField(boolField);
|
||||||
|
|
||||||
|
IntegerFieldEditor maxCharactersField = new IntegerFieldEditor(
|
||||||
|
IGdbDebugPreferenceConstants.PREF_MAX_GDB_TRACES,
|
||||||
|
MessagesForPreferences.GdbDebugPreferencePage_maxGdbTraces_label,
|
||||||
|
group);
|
||||||
|
// Instead of using Integer.MAX_VALUE which is some obscure number, using 2 billion is nice and readable
|
||||||
|
maxCharactersField.setValidRange(10000, 2000000000);
|
||||||
|
|
||||||
|
maxCharactersField.fillIntoGrid(group, 3);
|
||||||
|
addField(maxCharactersField);
|
||||||
|
|
||||||
// need to set layout again
|
// need to set layout again
|
||||||
group.setLayout(groupLayout);
|
group.setLayout(groupLayout);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2009, 2010 Ericsson and others.
|
* Copyright (c) 2009, 2011 Ericsson and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -25,6 +25,7 @@ public class GdbPreferenceInitializer extends AbstractPreferenceInitializer {
|
||||||
public void initializeDefaultPreferences() {
|
public void initializeDefaultPreferences() {
|
||||||
IPreferenceStore store = GdbUIPlugin.getDefault().getPreferenceStore();
|
IPreferenceStore store = GdbUIPlugin.getDefault().getPreferenceStore();
|
||||||
store.setDefault(IGdbDebugPreferenceConstants.PREF_TRACES_ENABLE, true);
|
store.setDefault(IGdbDebugPreferenceConstants.PREF_TRACES_ENABLE, true);
|
||||||
|
store.setDefault(IGdbDebugPreferenceConstants.PREF_MAX_GDB_TRACES, 500000);
|
||||||
store.setDefault(IGdbDebugPreferenceConstants.PREF_AUTO_TERMINATE_GDB, true);
|
store.setDefault(IGdbDebugPreferenceConstants.PREF_AUTO_TERMINATE_GDB, true);
|
||||||
store.setDefault(IGdbDebugPreferenceConstants.PREF_USE_INSPECTOR_HOVER, true);
|
store.setDefault(IGdbDebugPreferenceConstants.PREF_USE_INSPECTOR_HOVER, true);
|
||||||
store.setDefault(IGdbDebugPreferenceConstants.PREF_ENABLE_PRETTY_PRINTING, true);
|
store.setDefault(IGdbDebugPreferenceConstants.PREF_ENABLE_PRETTY_PRINTING, true);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2009, 2010 Ericsson and others.
|
* Copyright (c) 2009, 2011 Ericsson and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -20,19 +20,21 @@ class MessagesForPreferences extends NLS {
|
||||||
public static String GdbDebugPreferencePage_description;
|
public static String GdbDebugPreferencePage_description;
|
||||||
public static String GdbDebugPreferencePage_traces_label;
|
public static String GdbDebugPreferencePage_traces_label;
|
||||||
public static String GdbDebugPreferencePage_enableTraces_label;
|
public static String GdbDebugPreferencePage_enableTraces_label;
|
||||||
|
/** @since 2.2 */
|
||||||
|
public static String GdbDebugPreferencePage_maxGdbTraces_label;
|
||||||
public static String GdbDebugPreferencePage_termination_label;
|
public static String GdbDebugPreferencePage_termination_label;
|
||||||
public static String GdbDebugPreferencePage_autoTerminateGdb_label;
|
public static String GdbDebugPreferencePage_autoTerminateGdb_label;
|
||||||
public static String GdbDebugPreferencePage_hover_label;
|
public static String GdbDebugPreferencePage_hover_label;
|
||||||
public static String GdbDebugPreferencePage_useInspectorHover_label;
|
public static String GdbDebugPreferencePage_useInspectorHover_label;
|
||||||
/** @since 3.0 */
|
/** @since 2.2 */
|
||||||
public static String GdbDebugPreferencePage_prettyPrinting_label;
|
public static String GdbDebugPreferencePage_prettyPrinting_label;
|
||||||
/** @since 3.0 */
|
/** @since 2.2 */
|
||||||
public static String GdbDebugPreferencePage_enablePrettyPrinting_label1;
|
public static String GdbDebugPreferencePage_enablePrettyPrinting_label1;
|
||||||
/** @since 3.0 */
|
/** @since 2.2 */
|
||||||
public static String GdbDebugPreferencePage_enablePrettyPrinting_label2;
|
public static String GdbDebugPreferencePage_enablePrettyPrinting_label2;
|
||||||
/** @since 3.0 */
|
/** @since 2.2 */
|
||||||
public static String GdbDebugPreferencePage_initialChildCountLimitForCollections_label;
|
public static String GdbDebugPreferencePage_initialChildCountLimitForCollections_label;
|
||||||
/** @since 3.0 */
|
/** @since 2.2 */
|
||||||
public static String GdbDebugPreferencePage_defaults_label;
|
public static String GdbDebugPreferencePage_defaults_label;
|
||||||
static {
|
static {
|
||||||
// initialize resource bundle
|
// initialize resource bundle
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Copyright (c) 2009, 2010 Ericsson and others.
|
# Copyright (c) 2009, 2011 Ericsson and others.
|
||||||
# All rights reserved. This program and the accompanying materials
|
# All rights reserved. This program and the accompanying materials
|
||||||
# are made available under the terms of the Eclipse Public License v1.0
|
# are made available under the terms of the Eclipse Public License v1.0
|
||||||
# which accompanies this distribution, and is available at
|
# which accompanies this distribution, and is available at
|
||||||
|
@ -14,7 +14,7 @@ GdbDebugPreferencePage_description=General settings for GDB Debugging
|
||||||
|
|
||||||
GdbDebugPreferencePage_traces_label=Traces
|
GdbDebugPreferencePage_traces_label=Traces
|
||||||
GdbDebugPreferencePage_enableTraces_label=Enable GDB traces
|
GdbDebugPreferencePage_enableTraces_label=Enable GDB traces
|
||||||
|
GdbDebugPreferencePage_maxGdbTraces_label=Limit GDB traces output (# characters):
|
||||||
GdbDebugPreferencePage_termination_label=Termination
|
GdbDebugPreferencePage_termination_label=Termination
|
||||||
GdbDebugPreferencePage_autoTerminateGdb_label=Terminate GDB when last process exits
|
GdbDebugPreferencePage_autoTerminateGdb_label=Terminate GDB when last process exits
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2009, 2010 Ericsson and others.
|
* Copyright (c) 2009, 2011 Ericsson and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -26,6 +26,12 @@ public interface IGdbDebugPreferenceConstants {
|
||||||
*/
|
*/
|
||||||
public static final String PREF_TRACES_ENABLE = "tracesEnable"; //$NON-NLS-1$
|
public static final String PREF_TRACES_ENABLE = "tracesEnable"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The maximum number of characters in the GDB trace console. Default is 500000 characters.
|
||||||
|
* @since 4.0
|
||||||
|
*/
|
||||||
|
public static final String PREF_MAX_GDB_TRACES = "maxGdbTraces"; //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Boolean preference whether to automatically terminate GDB when the inferior exists. Default is <code>true</code>.
|
* Boolean preference whether to automatically terminate GDB when the inferior exists. Default is <code>true</code>.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Reference in a new issue