/*******************************************************************************
* Copyright (c) 2008 Red Hat, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Elliott Baron <ebaron@redhat.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.internal.valgrind.memcheck;
import java.util.Arrays;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.linuxtools.internal.valgrind.launch.LaunchConfigurationConstants;
import org.eclipse.linuxtools.valgrind.launch.IValgrindToolPage;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Text;
import org.osgi.framework.Version;
public class MemcheckToolPage extends AbstractLaunchConfigurationTab implements IValgrindToolPage {
private static final Version VER_3_4_0 = new Version(3, 4, 0);
private static final Version VER_3_6_0 = new Version(3, 6, 0);
// MEMCHECK controls
private Button leakCheckButton;
private Combo leakResCombo;
private Button showReachableButton;
private Spinner freelistSpinner;
private Button partialLoadsButton;
private Button undefValueButton;
private Button gccWorkaroundButton;
private Button alignmentButton;
private Spinner alignmentSpinner;
private Button mallocFillButton;
private Text mallocFillText;
private Button freeFillButton;
private Text freeFillText;
private List ignoreRangesList;
// VG >= 3.4.0
private Button trackOriginsButton;
// VG >= 3.6.0
private Button showPossiblyLostButton;
private boolean isInitializing = false;
private Version valgrindVersion;
private CoreException ex = null;
private SelectionListener selectListener = new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateLaunchConfigurationDialog();
}
};
private ModifyListener modifyListener = e -> updateLaunchConfigurationDialog();
@Override
public void createControl(Composite parent) {
Composite top = new Composite(parent, SWT.NONE);
GridLayout memcheckLayout = new GridLayout(2, true);
top.setLayout(memcheckLayout);
top.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
leakCheckButton = new Button(top, SWT.CHECK);
leakCheckButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
leakCheckButton.setText(Messages.getString("MemcheckToolPage.leak_check")); //$NON-NLS-1$
leakCheckButton.addSelectionListener(selectListener);
Composite leakResTop = new Composite(top, SWT.NONE);
leakResTop.setLayout(new GridLayout(2, false));
leakResTop.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Label leakResLabel = new Label(leakResTop, SWT.NONE);
leakResLabel.setText(Messages.getString("MemcheckToolPage.leak_resolution")); //$NON-NLS-1$
leakResCombo = new Combo(leakResTop, SWT.READ_ONLY);
String[] leakResOpts = { MemcheckLaunchConstants.LEAK_RES_LOW, MemcheckLaunchConstants.LEAK_RES_MED, MemcheckLaunchConstants.LEAK_RES_HIGH };
leakResCombo.setItems(leakResOpts);
leakResCombo.addSelectionListener(selectListener);
Composite freelistTop = new Composite(top, SWT.NONE);
freelistTop.setLayout(new GridLayout(2, false));
freelistTop.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Label freelistLabel = new Label(freelistTop, SWT.NONE);
freelistLabel.setText(Messages.getString("MemcheckToolPage.freelist_size")); //$NON-NLS-1$
freelistSpinner = new Spinner(freelistTop, SWT.BORDER);
freelistSpinner.setMaximum(Integer.MAX_VALUE);
freelistSpinner.addModifyListener(modifyListener);
showReachableButton = new Button(top, SWT.CHECK);
showReachableButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
showReachableButton.setText(Messages.getString("MemcheckToolPage.show_reachable")); //$NON-NLS-1$
showReachableButton.addSelectionListener(selectListener);
partialLoadsButton = new Button(top, SWT.CHECK);
partialLoadsButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
partialLoadsButton.setText(Messages.getString("MemcheckToolPage.allow_partial")); //$NON-NLS-1$
partialLoadsButton.addSelectionListener(selectListener);
undefValueButton = new Button(top, SWT.CHECK);
undefValueButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
undefValueButton.setText(Messages.getString("MemcheckToolPage.undef_value_errors")); //$NON-NLS-1$
undefValueButton.addSelectionListener(selectListener);
// VG >= 3.4.0
if (valgrindVersion == null || valgrindVersion.compareTo(VER_3_4_0) >= 0) {
trackOriginsButton = new Button(top, SWT.CHECK);
trackOriginsButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
trackOriginsButton.setText(Messages.getString("MemcheckToolPage.Track_origins")); //$NON-NLS-1$
trackOriginsButton.addSelectionListener(selectListener);
}
gccWorkaroundButton = new Button(top, SWT.CHECK);
gccWorkaroundButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
gccWorkaroundButton.setText(Messages.getString("MemcheckToolPage.gcc_296_workarounds")); //$NON-NLS-1$
gccWorkaroundButton.addSelectionListener(selectListener);
Composite alignmentTop = new Composite(top, SWT.NONE);
GridLayout alignmentLayout = new GridLayout(2, false);
alignmentLayout.marginWidth = alignmentLayout.marginHeight = 0;
alignmentTop.setLayout(alignmentLayout);
alignmentTop.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
alignmentButton = new Button(alignmentTop, SWT.CHECK);
alignmentButton.setText(Messages.getString("MemcheckToolPage.minimum_heap_block")); //$NON-NLS-1$
alignmentButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
checkAlignmentEnablement();
updateLaunchConfigurationDialog();
}
});
alignmentSpinner = new Spinner(alignmentTop, SWT.BORDER);
alignmentSpinner.setMinimum(0);
alignmentSpinner.setMaximum(4096);
alignmentSpinner.addModifyListener(modifyListener);
// VG >= 3.6.0
if (valgrindVersion == null || valgrindVersion.compareTo(VER_3_6_0) >= 0) {
showPossiblyLostButton = new Button(top, SWT.CHECK);
showPossiblyLostButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
showPossiblyLostButton.setText(Messages.getString("MemcheckToolPage.Show_Possibly_Lost")); //$NON-NLS-1$
showPossiblyLostButton.addSelectionListener(selectListener);
}
Composite mallocFillTop = new Composite(top, SWT.NONE);
GridLayout mallocFillLayout = new GridLayout(2, false);
mallocFillLayout.marginWidth = mallocFillLayout.marginHeight = 0;
mallocFillTop.setLayout(mallocFillLayout);
mallocFillTop.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
mallocFillButton = new Button(mallocFillTop, SWT.CHECK);
mallocFillButton.setText(Messages.getString("MemcheckToolPage.Malloc_Fill")); //$NON-NLS-1$
mallocFillButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
checkMallocFillEnablement();
updateLaunchConfigurationDialog();
}
});
mallocFillText = new Text(mallocFillTop, SWT.BORDER);
mallocFillText.setTextLimit(8);
mallocFillText.addModifyListener(modifyListener);
Composite freeFillTop = new Composite(top, SWT.NONE);
GridLayout freeFillLayout = new GridLayout(2, false);
freeFillLayout.marginWidth = freeFillLayout.marginHeight = 0;
freeFillTop.setLayout(freeFillLayout);
freeFillTop.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
freeFillButton = new Button(freeFillTop, SWT.CHECK);
freeFillButton.setText(Messages.getString("MemcheckToolPage.Free_Fill")); //$NON-NLS-1$
freeFillButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
checkFreeFillEnablement();
updateLaunchConfigurationDialog();
}
});
freeFillText = new Text(freeFillTop, SWT.BORDER);
mallocFillText.setTextLimit(8);
freeFillText.addModifyListener(modifyListener);
Composite ignoreRangesTop = new Composite(top, SWT.NONE);
ignoreRangesTop.setLayout(new GridLayout(3, false));
ignoreRangesTop.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false, 2, 1));
Label ignoreRangesLabel = new Label(ignoreRangesTop, SWT.NONE);
ignoreRangesLabel.setText(Messages.getString("MemcheckToolPage.Ignore_Ranges")); //$NON-NLS-1$
ignoreRangesLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
createIgnoreRangesControls(ignoreRangesTop);
}
private void createIgnoreRangesControls(Composite top) {
ignoreRangesList = new List(top, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
FontMetrics fm = MemcheckPlugin.getFontMetrics(ignoreRangesList);
ignoreRangesList.setLayoutData(new GridData(Dialog.convertWidthInCharsToPixels(fm, 50), Dialog.convertHeightInCharsToPixels(fm, 5)));
Composite ignoreButtons = new Composite(top, SWT.NONE);
GridLayout ignoreButtonsLayout = new GridLayout();
ignoreButtonsLayout.marginWidth = ignoreButtonsLayout.marginHeight = 0;
ignoreButtons.setLayout(ignoreButtonsLayout);
ignoreButtons.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
Button newButton = new Button(ignoreButtons, SWT.PUSH);
newButton.setText(Messages.getString("MemcheckToolPage.New")); //$NON-NLS-1$
newButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
newButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
handleIgnoreNewButtonPressed();
updateLaunchConfigurationDialog();
}
});
Button removeButton = new Button(ignoreButtons, SWT.PUSH);
removeButton.setText(Messages.getString("MemcheckToolPage.Remove")); //$NON-NLS-1$
removeButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
removeButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
handleIgnoreRemoveButtonPressed();
updateLaunchConfigurationDialog();
}
});
}
private void handleIgnoreNewButtonPressed() {
InputDialog dialog = new InputDialog(getShell(), Messages.getString("MemcheckToolPage.Ignore_Ranges"), Messages.getString("MemcheckToolPage.Range"), "", null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
if (dialog.open() == Window.OK) {
String function = dialog.getValue();
if (!function.equals("")) { //$NON-NLS-1$
ignoreRangesList.add(function);
}
}
}
private void handleIgnoreRemoveButtonPressed() {
int[] selections = ignoreRangesList.getSelectionIndices();
ignoreRangesList.remove(selections);
}
private void checkAlignmentEnablement() {
alignmentSpinner.setEnabled(alignmentButton.getSelection());
}
private void checkMallocFillEnablement() {
mallocFillText.setEnabled(mallocFillButton.getSelection());
}
private void checkFreeFillEnablement() {
freeFillText.setEnabled(freeFillButton.getSelection());
}
@Override
public String getName() {
return Messages.getString("MemcheckToolPage.Memcheck_Options"); //$NON-NLS-1$
}
@Override
public void initializeFrom(ILaunchConfiguration configuration) {
isInitializing = true;
try {
leakCheckButton.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_LEAKCHECK, MemcheckLaunchConstants.DEFAULT_MEMCHECK_LEAKCHECK));
leakResCombo.setText(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_LEAKRES, MemcheckLaunchConstants.DEFAULT_MEMCHECK_LEAKRES));
showReachableButton.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_SHOWREACH, MemcheckLaunchConstants.DEFAULT_MEMCHECK_SHOWREACH));
freelistSpinner.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_FREELIST, MemcheckLaunchConstants.DEFAULT_MEMCHECK_FREELIST));
partialLoadsButton.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_PARTIAL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_PARTIAL));
undefValueButton.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_UNDEF, MemcheckLaunchConstants.DEFAULT_MEMCHECK_UNDEF));
gccWorkaroundButton.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_GCCWORK, MemcheckLaunchConstants.DEFAULT_MEMCHECK_GCCWORK));
alignmentButton.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_ALIGNMENT_BOOL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_ALIGNMENT_BOOL));
checkAlignmentEnablement();
alignmentSpinner.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_ALIGNMENT_VAL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_ALIGNMENT_VAL));
// VG >= 3.4.0
if (valgrindVersion == null || valgrindVersion.compareTo(VER_3_4_0) >= 0) {
trackOriginsButton.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_TRACKORIGINS, MemcheckLaunchConstants.DEFAULT_MEMCHECK_TRACKORIGINS));
}
// VG >= 3.6.0
if (valgrindVersion == null || valgrindVersion.compareTo(VER_3_6_0) >= 0) {
showPossiblyLostButton.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_POSSIBLY_LOST_BOOL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_POSSIBLY_LOST_BOOL));
}
mallocFillButton.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_MALLOCFILL_BOOL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_MALLOCFILL_BOOL));
checkMallocFillEnablement();
mallocFillText.setText(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_MALLOCFILL_VAL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_MALLOCFILL_VAL));
freeFillButton.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_FREEFILL_BOOL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_FREEFILL_BOOL));
checkFreeFillEnablement();
freeFillText.setText(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_FREEFILL_VAL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_FREEFILL_VAL));
java.util.List<String> ignoreFns = configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_IGNORE_RANGES, MemcheckLaunchConstants.DEFAULT_MEMCHECK_IGNORE_RANGES);
ignoreRangesList.setItems(ignoreFns.toArray(new String[ignoreFns.size()]));
} catch (CoreException e) {
ex = e;
}
isInitializing = false;
}
@Override
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_LEAKCHECK, leakCheckButton.getSelection());
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_LEAKRES, leakResCombo.getText());
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_SHOWREACH, showReachableButton.getSelection());
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_FREELIST, freelistSpinner.getSelection());
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_PARTIAL, partialLoadsButton.getSelection());
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_UNDEF, undefValueButton.getSelection());
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_GCCWORK, gccWorkaroundButton.getSelection());
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_ALIGNMENT_BOOL, alignmentButton.getSelection());
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_ALIGNMENT_VAL, alignmentSpinner.getSelection());
// VG >= 3.4.0
if (valgrindVersion == null || valgrindVersion.compareTo(VER_3_4_0) >= 0) {
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_TRACKORIGINS, trackOriginsButton.getSelection());
}
// VG >= 3.6.0
if (valgrindVersion == null || valgrindVersion.compareTo(VER_3_6_0) >= 0) {
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_POSSIBLY_LOST_BOOL, showPossiblyLostButton.getSelection());
}
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_MALLOCFILL_BOOL, mallocFillButton.getSelection());
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_MALLOCFILL_VAL, mallocFillText.getText());
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_FREEFILL_BOOL, freeFillButton.getSelection());
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_FREEFILL_VAL, freeFillText.getText());
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_IGNORE_RANGES, Arrays.asList(ignoreRangesList.getItems()));
}
@Override
public boolean isValid(ILaunchConfiguration launchConfig) {
setErrorMessage(null);
boolean result = false;
try {
// check alignment
int alignment = launchConfig.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_ALIGNMENT_VAL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_ALIGNMENT_VAL);
result = (alignment & (alignment - 1)) == 0; // is power of two?
if (!result) {
setErrorMessage(Messages.getString("MemcheckToolPage.Alignment_must_be_power_2")); //$NON-NLS-1$
}
else {
// VG >= 3.4.0
if (valgrindVersion == null || valgrindVersion.compareTo(VER_3_4_0) >= 0) {
// check track-origins
boolean trackOrigins = launchConfig.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_TRACKORIGINS, MemcheckLaunchConstants.DEFAULT_MEMCHECK_TRACKORIGINS);
if (trackOrigins) {
// undef-value-errors must be selected
result = launchConfig.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_UNDEF, MemcheckLaunchConstants.DEFAULT_MEMCHECK_UNDEF);
if (!result) {
setErrorMessage(NLS.bind(Messages.getString("MemcheckToolPage.Track_origins_needs_undef"), Messages.getString("MemcheckToolPage.Track_origins"), Messages.getString("MemcheckToolPage.undef_value_errors"))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
}
}
} catch (CoreException e) {
ex = e;
}
if (ex != null) {
setErrorMessage(ex.getLocalizedMessage());
}
return result;
}
@Override
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
configuration.setAttribute(LaunchConfigurationConstants.ATTR_TOOL, MemcheckPlugin.TOOL_ID);
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_LEAKCHECK, MemcheckLaunchConstants.DEFAULT_MEMCHECK_LEAKCHECK);
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_LEAKRES, MemcheckLaunchConstants.DEFAULT_MEMCHECK_LEAKRES);
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_SHOWREACH, MemcheckLaunchConstants.DEFAULT_MEMCHECK_SHOWREACH);
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_FREELIST, MemcheckLaunchConstants.DEFAULT_MEMCHECK_FREELIST);
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_PARTIAL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_PARTIAL);
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_UNDEF, MemcheckLaunchConstants.DEFAULT_MEMCHECK_UNDEF);
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_GCCWORK, MemcheckLaunchConstants.DEFAULT_MEMCHECK_GCCWORK);
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_ALIGNMENT_BOOL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_ALIGNMENT_BOOL);
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_ALIGNMENT_VAL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_ALIGNMENT_VAL);
// VG >= 3.4.0
if (valgrindVersion == null || valgrindVersion.compareTo(VER_3_4_0) >= 0) {
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_TRACKORIGINS, MemcheckLaunchConstants.DEFAULT_MEMCHECK_TRACKORIGINS);
}
// VG >= 3.6.0
if (valgrindVersion == null || valgrindVersion.compareTo(VER_3_6_0) >= 0) {
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_POSSIBLY_LOST_BOOL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_POSSIBLY_LOST_BOOL);
}
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_IGNORE_RANGES, MemcheckLaunchConstants.DEFAULT_MEMCHECK_IGNORE_RANGES);
}
@Override
public void setValgrindVersion(Version ver) {
valgrindVersion = ver;
}
@Override
public void updateLaunchConfigurationDialog() {
if (!isInitializing) {
super.updateLaunchConfigurationDialog();
}
}
public Button getLeakCheckButton() {
return leakCheckButton;
}
public Combo getLeakResCombo() {
return leakResCombo;
}
public Button getShowReachableButton() {
return showReachableButton;
}
public Spinner getFreelistSpinner() {
return freelistSpinner;
}
public Button getPartialLoadsButton() {
return partialLoadsButton;
}
public Button getUndefValueButton() {
return undefValueButton;
}
public Button getGccWorkaroundButton() {
return gccWorkaroundButton;
}
public Button getAlignmentButton() {
return alignmentButton;
}
public Spinner getAlignmentSpinner() {
return alignmentSpinner;
}
public Button getTrackOriginsButton() {
return trackOriginsButton;
}
}