Skip to content

Commit ba34c1c

Browse files
debonzi-xxAndrew Overholt
authored and
Andrew Overholt
committed
Valgrind 3.6 memcheck new options included.
1 parent d0fea49 commit ba34c1c

File tree

6 files changed

+219
-0
lines changed

6 files changed

+219
-0
lines changed

Diff for: valgrind/org.eclipse.linuxtools.valgrind.memcheck/src/org/eclipse/linuxtools/internal/valgrind/memcheck/MemcheckCommandConstants.java

+6
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,10 @@ public final class MemcheckCommandConstants {
2323

2424
// VG >= 3.4.0
2525
public static final String OPT_TRACKORIGINS = "--track-origins"; //$NON-NLS-1$
26+
27+
// VG >= 3.6.0
28+
public static final String OPT_SHOW_POSSIBLY_LOST = "--show-possibly-lost"; //$NON-NLS-1$
29+
public static final String OPT_IGNORERANGES = "--ignore-ranges"; //$NON-NLS-1$
30+
public static final String OPT_MALLOCFILL = "--malloc-fill"; //$NON-NLS-1$
31+
public static final String OPT_FREEFILL = "--free-fill"; //$NON-NLS-1$
2632
}

Diff for: valgrind/org.eclipse.linuxtools.valgrind.memcheck/src/org/eclipse/linuxtools/internal/valgrind/memcheck/MemcheckLaunchConstants.java

+19
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
*******************************************************************************/
1111
package org.eclipse.linuxtools.internal.valgrind.memcheck;
1212

13+
import java.util.Collections;
14+
import java.util.List;
15+
1316
public final class MemcheckLaunchConstants {
1417
// LaunchConfiguration attributes
1518
public static final String ATTR_MEMCHECK_LEAKCHECK = MemcheckPlugin.PLUGIN_ID + ".MEMCHECK_LEAKCHECK"; //$NON-NLS-1$
@@ -25,6 +28,14 @@ public final class MemcheckLaunchConstants {
2528
// VG >= 3.4.0
2629
public static final String ATTR_MEMCHECK_TRACKORIGINS = MemcheckPlugin.PLUGIN_ID + ".MEMCHECK_TRACKORIGINS"; //$NON-NLS-1$
2730

31+
// VG >= 3.6.0
32+
public static final String ATTR_MEMCHECK_POSSIBLY_LOST_BOOL = MemcheckPlugin.PLUGIN_ID + ".MEMCHECK_POSSIBLY_LOST"; //$NON-NLS-1$
33+
public static final String ATTR_MEMCHECK_MALLOCFILL_BOOL = MemcheckPlugin.PLUGIN_ID + ".MEMCHECK_MALLOCFILL_BOOL"; //$NON-NLS-1$
34+
public static final String ATTR_MEMCHECK_MALLOCFILL_VAL = MemcheckPlugin.PLUGIN_ID + ".MEMCHECK_MALLOCFILL_VAL"; //$NON-NLS-1$
35+
public static final String ATTR_MEMCHECK_FREEFILL_BOOL = MemcheckPlugin.PLUGIN_ID + ".MEMCHECK_FREEFILL_BOOL"; //$NON-NLS-1$
36+
public static final String ATTR_MEMCHECK_FREEFILL_VAL = MemcheckPlugin.PLUGIN_ID + ".MEMCHECK_FREEFILL_VAL"; //$NON-NLS-1$
37+
public static final String ATTR_MEMCHECK_IGNORE_RANGES = MemcheckPlugin.PLUGIN_ID + ".MEMCHECK_IGNORE_RANGES"; //$NON-NLS-1$
38+
2839
public static final String LEAK_RES_LOW = "low"; //$NON-NLS-1$
2940
public static final String LEAK_RES_MED = "med"; //$NON-NLS-1$
3041
public static final String LEAK_RES_HIGH = "high"; //$NON-NLS-1$
@@ -41,4 +52,12 @@ public final class MemcheckLaunchConstants {
4152

4253
// VG >= 3.4.0
4354
public static final boolean DEFAULT_MEMCHECK_TRACKORIGINS = false;
55+
56+
// VG >= 3.6.0
57+
public static final boolean DEFAULT_MEMCHECK_POSSIBLY_LOST_BOOL = false;
58+
public static final boolean DEFAULT_MEMCHECK_MALLOCFILL_BOOL = false;
59+
public static final String DEFAULT_MEMCHECK_MALLOCFILL_VAL = "";
60+
public static final boolean DEFAULT_MEMCHECK_FREEFILL_BOOL = false;
61+
public static final String DEFAULT_MEMCHECK_FREEFILL_VAL = "";
62+
public static final List<?> DEFAULT_MEMCHECK_IGNORE_RANGES = Collections.EMPTY_LIST;
4463
}

Diff for: valgrind/org.eclipse.linuxtools.valgrind.memcheck/src/org/eclipse/linuxtools/internal/valgrind/memcheck/MemcheckLaunchDelegate.java

+14
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
package org.eclipse.linuxtools.internal.valgrind.memcheck;
1212

1313
import java.util.ArrayList;
14+
import java.util.List;
1415

1516
import org.eclipse.core.runtime.CoreException;
1617
import org.eclipse.core.runtime.IPath;
@@ -26,10 +27,12 @@ public class MemcheckLaunchDelegate implements IValgrindLaunchDelegate {
2627
private static final String EQUALS = "="; //$NON-NLS-1$
2728
private static final String NO = "no"; //$NON-NLS-1$
2829
private static final String YES = "yes"; //$NON-NLS-1$
30+
private static final String HEX = "0x"; //$NON-NLS-1$
2931

3032
public void handleLaunch(ILaunchConfiguration config, ILaunch launch, IPath outDir, IProgressMonitor monitor) throws CoreException {
3133
}
3234

35+
@SuppressWarnings("unchecked")
3336
public String[] getCommandArray(ILaunchConfiguration config, Version ver, IPath logDir) throws CoreException {
3437
ArrayList<String> opts = new ArrayList<String>();
3538

@@ -48,7 +51,18 @@ public String[] getCommandArray(ILaunchConfiguration config, Version ver, IPath
4851
if (ver == null || ver.compareTo(VER_3_4_0) >= 0) {
4952
opts.add(MemcheckCommandConstants.OPT_TRACKORIGINS + EQUALS + (config.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_TRACKORIGINS, MemcheckLaunchConstants.DEFAULT_MEMCHECK_TRACKORIGINS) ? YES : NO));
5053
}
54+
55+
if (config.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_MALLOCFILL_BOOL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_MALLOCFILL_BOOL)) {
56+
opts.add(MemcheckCommandConstants.OPT_MALLOCFILL + EQUALS + HEX + config.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_MALLOCFILL_VAL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_MALLOCFILL_VAL));
57+
}
5158

59+
if (config.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_FREEFILL_BOOL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_FREEFILL_BOOL)) {
60+
opts.add(MemcheckCommandConstants.OPT_FREEFILL + EQUALS + HEX + config.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_FREEFILL_VAL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_FREEFILL_VAL));
61+
}
62+
List<String> ignoreRangesFns = config.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_IGNORE_RANGES, MemcheckLaunchConstants.DEFAULT_MEMCHECK_IGNORE_RANGES);
63+
for (String func : ignoreRangesFns) {
64+
opts.add(MemcheckCommandConstants.OPT_IGNORERANGES + EQUALS + func);
65+
}
5266
return opts.toArray(new String[opts.size()]);
5367
}
5468

Diff for: valgrind/org.eclipse.linuxtools.valgrind.memcheck/src/org/eclipse/linuxtools/internal/valgrind/memcheck/MemcheckPlugin.java

+11
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
*******************************************************************************/
1111
package org.eclipse.linuxtools.internal.valgrind.memcheck;
1212

13+
import org.eclipse.swt.graphics.FontMetrics;
14+
import org.eclipse.swt.graphics.GC;
15+
import org.eclipse.swt.widgets.Control;
1316
import org.eclipse.ui.plugin.AbstractUIPlugin;
1417
import org.osgi.framework.BundleContext;
1518

@@ -54,5 +57,13 @@ public void stop(BundleContext context) throws Exception {
5457
public static MemcheckPlugin getDefault() {
5558
return plugin;
5659
}
60+
61+
public static FontMetrics getFontMetrics(Control control) {
62+
GC gc = new GC(control);
63+
gc.setFont(control.getFont());
64+
FontMetrics fontMetrics = gc.getFontMetrics();
65+
gc.dispose();
66+
return fontMetrics;
67+
}
5768

5869
}

Diff for: valgrind/org.eclipse.linuxtools.valgrind.memcheck/src/org/eclipse/linuxtools/internal/valgrind/memcheck/MemcheckToolPage.java

+162
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,15 @@
1010
*******************************************************************************/
1111
package org.eclipse.linuxtools.internal.valgrind.memcheck;
1212

13+
import java.util.Arrays;
14+
1315
import org.eclipse.core.runtime.CoreException;
1416
import org.eclipse.debug.core.ILaunchConfiguration;
1517
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
1618
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
19+
import org.eclipse.jface.dialogs.Dialog;
20+
import org.eclipse.jface.dialogs.InputDialog;
21+
import org.eclipse.jface.window.Window;
1722
import org.eclipse.linuxtools.valgrind.launch.IValgrindToolPage;
1823
import org.eclipse.osgi.util.NLS;
1924
import org.eclipse.swt.SWT;
@@ -22,13 +27,16 @@
2227
import org.eclipse.swt.events.SelectionAdapter;
2328
import org.eclipse.swt.events.SelectionEvent;
2429
import org.eclipse.swt.events.SelectionListener;
30+
import org.eclipse.swt.graphics.FontMetrics;
2531
import org.eclipse.swt.layout.GridData;
2632
import org.eclipse.swt.layout.GridLayout;
2733
import org.eclipse.swt.widgets.Button;
2834
import org.eclipse.swt.widgets.Combo;
2935
import org.eclipse.swt.widgets.Composite;
3036
import org.eclipse.swt.widgets.Label;
37+
import org.eclipse.swt.widgets.List;
3138
import org.eclipse.swt.widgets.Spinner;
39+
import org.eclipse.swt.widgets.Text;
3240
import org.osgi.framework.Version;
3341

3442
public class MemcheckToolPage extends AbstractLaunchConfigurationTab implements IValgrindToolPage {
@@ -50,6 +58,13 @@ public class MemcheckToolPage extends AbstractLaunchConfigurationTab implements
5058
// VG >= 3.4.0
5159
protected Button trackOriginsButton;
5260

61+
protected Button showPossiblyLostButton;
62+
protected Button mallocFillButton;
63+
protected Text mallocFillText;
64+
protected Button freeFillButton;
65+
protected Text freeFillText;
66+
protected List ignoreRangesList;
67+
5368
protected boolean isInitializing = false;
5469
protected Version valgrindVersion;
5570
protected CoreException ex = null;
@@ -144,16 +159,126 @@ public void widgetSelected(SelectionEvent e) {
144159
alignmentSpinner.setMinimum(0);
145160
alignmentSpinner.setMaximum(4096);
146161
alignmentSpinner.addModifyListener(modifyListener);
162+
163+
showPossiblyLostButton = new Button(top, SWT.CHECK);
164+
showPossiblyLostButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
165+
showPossiblyLostButton.setText(Messages.getString("MemcheckToolPage.Show_Possibly_Lost")); //$NON-NLS-1$
166+
showPossiblyLostButton.addSelectionListener(selectListener);
167+
168+
Composite mallocFillTop = new Composite(top, SWT.NONE);
169+
GridLayout mallocFillLayout = new GridLayout(2, false);
170+
mallocFillTop.setLayout(mallocFillLayout);
171+
mallocFillTop.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
172+
173+
mallocFillButton = new Button(mallocFillTop, SWT.CHECK);
174+
mallocFillButton.setText(Messages.getString("MemcheckToolPage.Malloc_Fill")); //$NON-NLS-1$
175+
mallocFillButton.addSelectionListener(new SelectionAdapter() {
176+
@Override
177+
public void widgetSelected(SelectionEvent e) {
178+
checkMallocFillEnablement();
179+
updateLaunchConfigurationDialog();
180+
}
181+
});
182+
mallocFillText = new Text(mallocFillTop, SWT.BORDER);
183+
mallocFillText.setTextLimit(8);
184+
mallocFillText.addModifyListener(modifyListener);
185+
186+
187+
Composite freeFillTop = new Composite(top, SWT.NONE);
188+
GridLayout freeFillLayout = new GridLayout(2, false);
189+
freeFillTop.setLayout(freeFillLayout);
190+
freeFillTop.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
191+
192+
freeFillButton = new Button(freeFillTop, SWT.CHECK);
193+
freeFillButton.setText(Messages.getString("MemcheckToolPage.Free_Fill")); //$NON-NLS-1$
194+
freeFillButton.addSelectionListener(new SelectionAdapter() {
195+
@Override
196+
public void widgetSelected(SelectionEvent e) {
197+
checkFreeFillEnablement();
198+
updateLaunchConfigurationDialog();
199+
}
200+
});
201+
freeFillText = new Text(freeFillTop, SWT.BORDER);
202+
mallocFillText.setTextLimit(8);
203+
freeFillText.addModifyListener(modifyListener);
204+
205+
Composite ignoreRangesTop = new Composite(top, SWT.NONE);
206+
ignoreRangesTop.setLayout(new GridLayout(3, false));
207+
ignoreRangesTop.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false, 2, 1));
208+
209+
Label ignoreRangesLabel = new Label(ignoreRangesTop, SWT.NONE);
210+
ignoreRangesLabel.setText(Messages.getString("MemcheckToolPage.Ignore_Ranges")); //$NON-NLS-1$
211+
ignoreRangesLabel.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
212+
213+
createIgnoreRangesControls(ignoreRangesTop);
214+
}
215+
216+
private void createIgnoreRangesControls(Composite top) {
217+
218+
ignoreRangesList = new List(top, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
219+
FontMetrics fm = MemcheckPlugin.getFontMetrics(ignoreRangesList);
220+
ignoreRangesList.setLayoutData(new GridData(Dialog.convertWidthInCharsToPixels(fm, 50), Dialog.convertHeightInCharsToPixels(fm, 5)));
221+
222+
Composite ignoreButtons = new Composite(top, SWT.NONE);
223+
GridLayout ignoreButtonsLayout = new GridLayout();
224+
ignoreButtonsLayout.marginWidth = ignoreButtonsLayout.marginHeight = 0;
225+
ignoreButtons.setLayout(ignoreButtonsLayout);
226+
ignoreButtons.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
227+
228+
Button newButton = new Button(ignoreButtons, SWT.PUSH);
229+
newButton.setText(Messages.getString("MemcheckToolPage.New")); //$NON-NLS-1$
230+
newButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
231+
newButton.addSelectionListener(new SelectionAdapter() {
232+
public void widgetSelected(SelectionEvent e) {
233+
handleIgnoreNewButtonPressed();
234+
updateLaunchConfigurationDialog();
235+
}
236+
});
237+
238+
Button removeButton = new Button(ignoreButtons, SWT.PUSH);
239+
removeButton.setText(Messages.getString("MemcheckToolPage.Remove")); //$NON-NLS-1$
240+
removeButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
241+
removeButton.addSelectionListener(new SelectionAdapter() {
242+
public void widgetSelected(SelectionEvent e) {
243+
handleIgnoreRemoveButtonPressed();
244+
updateLaunchConfigurationDialog();
245+
}
246+
});
247+
248+
}
249+
250+
protected void handleIgnoreNewButtonPressed() {
251+
InputDialog dialog = new InputDialog(getShell(), Messages.getString("MemcheckToolPage.Ignore_Ranges"), Messages.getString("MemcheckToolPage.Range"), "", null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
252+
if (dialog.open() == Window.OK) {
253+
String function = dialog.getValue();
254+
if (!function.equals("")) { //$NON-NLS-1$
255+
ignoreRangesList.add(function);
256+
}
257+
}
258+
}
259+
260+
protected void handleIgnoreRemoveButtonPressed() {
261+
int[] selections = ignoreRangesList.getSelectionIndices();
262+
ignoreRangesList.remove(selections);
147263
}
148264

149265
private void checkAlignmentEnablement() {
150266
alignmentSpinner.setEnabled(alignmentButton.getSelection());
151267
}
152268

269+
private void checkMallocFillEnablement() {
270+
mallocFillText.setEnabled(mallocFillButton.getSelection());
271+
}
272+
273+
private void checkFreeFillEnablement() {
274+
freeFillText.setEnabled(freeFillButton.getSelection());
275+
}
276+
153277
public String getName() {
154278
return Messages.getString("MemcheckToolPage.Memcheck_Options"); //$NON-NLS-1$
155279
}
156280

281+
@SuppressWarnings("unchecked")
157282
public void initializeFrom(ILaunchConfiguration configuration) {
158283
isInitializing = true;
159284
try {
@@ -172,6 +297,18 @@ public void initializeFrom(ILaunchConfiguration configuration) {
172297
if (valgrindVersion == null || valgrindVersion.compareTo(VER_3_4_0) >= 0) {
173298
trackOriginsButton.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_TRACKORIGINS, MemcheckLaunchConstants.DEFAULT_MEMCHECK_TRACKORIGINS));
174299
}
300+
301+
showPossiblyLostButton.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_POSSIBLY_LOST_BOOL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_POSSIBLY_LOST_BOOL));
302+
mallocFillButton.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_MALLOCFILL_BOOL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_MALLOCFILL_BOOL));
303+
checkMallocFillEnablement();
304+
mallocFillText.setText(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_MALLOCFILL_VAL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_MALLOCFILL_VAL));
305+
freeFillButton.setSelection(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_FREEFILL_BOOL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_FREEFILL_BOOL));
306+
checkFreeFillEnablement();
307+
freeFillText.setText(configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_FREEFILL_VAL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_FREEFILL_VAL));
308+
java.util.List<String> ignoreFns = configuration.getAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_IGNORE_RANGES, MemcheckLaunchConstants.DEFAULT_MEMCHECK_IGNORE_RANGES);
309+
ignoreRangesList.setItems(ignoreFns.toArray(new String[ignoreFns.size()]));
310+
311+
175312
} catch (CoreException e) {
176313
ex = e;
177314
}
@@ -192,6 +329,13 @@ public void performApply(ILaunchConfigurationWorkingCopy configuration) {
192329
if (valgrindVersion == null || valgrindVersion.compareTo(VER_3_4_0) >= 0) {
193330
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_TRACKORIGINS, trackOriginsButton.getSelection());
194331
}
332+
333+
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_POSSIBLY_LOST_BOOL, showPossiblyLostButton.getSelection());
334+
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_MALLOCFILL_BOOL, mallocFillButton.getSelection());
335+
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_MALLOCFILL_VAL, mallocFillText.getText());
336+
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_FREEFILL_BOOL, freeFillButton.getSelection());
337+
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_FREEFILL_VAL, freeFillText.getText());
338+
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_IGNORE_RANGES, Arrays.asList(ignoreRangesList.getItems()));
195339
}
196340

197341
@Override
@@ -244,6 +388,9 @@ public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
244388
if (valgrindVersion == null || valgrindVersion.compareTo(VER_3_4_0) >= 0) {
245389
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_TRACKORIGINS, MemcheckLaunchConstants.DEFAULT_MEMCHECK_TRACKORIGINS);
246390
}
391+
392+
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_POSSIBLY_LOST_BOOL, MemcheckLaunchConstants.DEFAULT_MEMCHECK_POSSIBLY_LOST_BOOL);
393+
configuration.setAttribute(MemcheckLaunchConstants.ATTR_MEMCHECK_IGNORE_RANGES, MemcheckLaunchConstants.DEFAULT_MEMCHECK_IGNORE_RANGES);
247394
}
248395

249396
public void setValgrindVersion(Version ver) {
@@ -314,4 +461,19 @@ public Button getTrackOriginsButton() {
314461
return trackOriginsButton;
315462
}
316463

464+
public Button getShowPossiblyLostButton() {
465+
return showPossiblyLostButton;
466+
}
467+
468+
public Text getMallocFillText() {
469+
return mallocFillText;
470+
}
471+
472+
public Text getFreeFillText() {
473+
return freeFillText;
474+
}
475+
476+
public List getIgnoreRangesList() {
477+
return ignoreRangesList;
478+
}
317479
}

Diff for: valgrind/org.eclipse.linuxtools.valgrind.memcheck/src/org/eclipse/linuxtools/internal/valgrind/memcheck/messages.properties

+7
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,10 @@ MemcheckToolPage.undef_value_errors=Undefined value errors
1313
MemcheckToolPage.minimum_heap_block=Minimum heap block alignment:
1414
MemcheckToolPage.Track_origins=Track origins of uninitialized values
1515
MemcheckToolPage.Track_origins_needs_undef="{0}" cannot be used without selecting "{1}"
16+
MemcheckToolPage.Show_Possibly_Lost=Show possibly lost blocks in leak check
17+
MemcheckToolPage.Ignore_Ranges=Ignore Ranges
18+
MemcheckToolPage.Range=Range (i.e. 0xPP-0xQQ):
19+
MemcheckToolPage.New=New
20+
MemcheckToolPage.Remove=Remove
21+
MemcheckToolPage.Malloc_Fill=Fill malloc'd areas with given value (0x)
22+
MemcheckToolPage.Free_Fill=Fill free'd areas with given value (0x)

0 commit comments

Comments
 (0)