Added pref panel for more EDC debugger settings.
diff --git a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/EDCDebuggerPreferencePage.java b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/EDCDebuggerPreferencePage.java
new file mode 100644
index 0000000..65e42b7
--- /dev/null
+++ b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/EDCDebuggerPreferencePage.java
@@ -0,0 +1,88 @@
+/*******************************************************************************

+ * Copyright (c) 2011 Nokia and others.

+ * 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:

+ * Nokia - Initial API and implementation

+ *******************************************************************************/

+package org.eclipse.cdt.debug.edc.internal.ui;

+

+import org.eclipse.cdt.debug.edc.internal.EDCDebugger;

+import org.eclipse.cdt.debug.edc.internal.PersistentCache;

+import org.eclipse.jface.preference.BooleanFieldEditor;

+import org.eclipse.jface.preference.FieldEditorPreferencePage;

+import org.eclipse.jface.preference.IPreferenceStore;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.ui.IWorkbench;

+import org.eclipse.ui.IWorkbenchPreferencePage;

+import org.eclipse.ui.PlatformUI;

+

+public class EDCDebuggerPreferencePage extends FieldEditorPreferencePage

+		implements IWorkbenchPreferencePage {

+

+//	private Button changeButton;

+

+	/**

+	 * Create the preference page.

+	 */

+	public EDCDebuggerPreferencePage() {

+		super(FLAT);

+		IPreferenceStore store = EDCDebugUI.getDefault().getPreferenceStore();

+		setPreferenceStore(store);

+	}

+

+	public void init(IWorkbench arg0) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	public void createControl(Composite parent) {

+		super.createControl(parent);

+		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IEDCHelpContextIds.EDC_DEBUGGER_PREFERENCE_PAGE);

+	}

+

+	/**

+	 * Create contents of the preference page.

+	 */

+	@Override

+	protected void createFieldEditors() {

+		addField(new BooleanFieldEditor(PersistentCache.USE_PERSISTENT_CACHE,

+										Messages.EDCDebugger_EnableDebuggerCacheLabel,

+										getFieldEditorParent()));

+/* TODO "Clear Cache Button" 

+ * getting the following into the fieldEditorPreferencesPage

+ * was not as utterly trivial as i thought.  at the very least,

+ * someone needs to implement the "clearCachedNowPressed()",

+ * as well as the other minor details of positioning/gridLayout, etc.

+ */

+//

+//		GridData gd = new GridData();

+//		gd.horizontalAlignment = GridData.FILL;

+//		int widthHint

+//		  = convertHorizontalDLUsToPixels(changeButton, IDialogConstants.BUTTON_WIDTH);

+//		gd.widthHint = Math.max(widthHint, changeButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);

+//		changeButton.setLayoutData(gd);

+//		changeButton.setText(Messages.EDCDebugger_ClearDebuggerCacheNow);

+//		changeButton.addSelectionListener(new SelectionAdapter() {

+//			public void widgetSelected(SelectionEvent evt) {

+//				clearCachedNowPressed();

+//			}

+//		});

+//		changeButton.addDisposeListener(new DisposeListener() {

+//			public void widgetDisposed(DisposeEvent event) {

+//				changeButton = null;

+//			}

+//		});

+

+		addField(new BooleanFieldEditor(EDCDebugger.EDC_RESOLVE_OPAQUE_TYPES,

+										Messages.EDCDebugger_ResolveOpaqueTypesLabel,

+										getFieldEditorParent()));

+		addField(new BooleanFieldEditor(EDCDebugger.EDC_RESOLVE_RTTI_TYPES,

+										Messages.EDCDebugger_ResolveRTTITypesLabel,

+										getFieldEditorParent()));

+	}

+

+}

diff --git a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/IEDCHelpContextIds.java b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/IEDCHelpContextIds.java
index 64091c1..ba6d161 100644
--- a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/IEDCHelpContextIds.java
+++ b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/IEDCHelpContextIds.java
@@ -15,6 +15,7 @@
 
 	public static final String PREFIX = EDCDebugUI.PLUGIN_ID + "."; //$NON-NLS-1$
 
+	public static final String EDC_DEBUGGER_PREFERENCE_PAGE = PREFIX + "edc_debugger_preference_page_context"; //$NON-NLS-1$
 	public static final String SNAPSHOT_PREFERENCE_PAGE = PREFIX + "snapshot_preference_page_context"; //$NON-NLS-1$
 
 }
diff --git a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/Messages.java b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/Messages.java
new file mode 100644
index 0000000..9513a4d
--- /dev/null
+++ b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/Messages.java
@@ -0,0 +1,31 @@
+/*******************************************************************************

+ * Copyright (c) 2011 Nokia and others.

+ * 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:

+ * Nokia - Initial API and implementation

+ *******************************************************************************/

+

+package org.eclipse.cdt.debug.edc.internal.ui;

+

+import org.eclipse.osgi.util.NLS;

+

+public class Messages {

+	private static final String BUNDLE_NAME = "org.eclipse.cdt.debug.edc.internal.ui.Messages"; //$NON-NLS-1$

+

+	public static String EDCDebugger_EnableDebuggerCacheLabel;

+	public static String EDCDebugger_ResolveOpaqueTypesLabel;

+	public static String EDCDebugger_ResolveRTTITypesLabel;

+

+	static {

+		// initialize resource bundle

+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);

+	}

+

+	private Messages() {

+	}

+

+}

diff --git a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/Messages.properties b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/Messages.properties
new file mode 100644
index 0000000..b7a91d6
--- /dev/null
+++ b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/Messages.properties
@@ -0,0 +1,13 @@
+###############################################################################

+# Copyright (c) 2011 Nokia and others.

+# 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:

+# Nokia - Initial implementation

+###############################################################################

+EDCDebugger_EnableDebuggerCacheLabel=Cache debug data from previous sessions

+EDCDebugger_ResolveOpaqueTypesLabel=Attempt to resolve opaque variable types

+EDCDebugger_ResolveRTTITypesLabel=Attempt to show the dynamic runtime types of objects

diff --git a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/SnapshotPreferencePage.java b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/SnapshotPreferencePage.java
index bfe7891..6062ebe 100644
--- a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/SnapshotPreferencePage.java
+++ b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/SnapshotPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 Nokia and others.
+ * Copyright (c) 2010, 2011 Nokia and others.
  * 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
@@ -37,13 +37,23 @@
 	 */
 	@Override
 	protected void createFieldEditors() {
+		
 		// Create the field editors
-		addField(new ComboFieldEditor(Album.PREF_CREATION_CONTROL, "Create snapshots:", new String[][]{{"Manually", Album.CREATE_MANUAL}, {"When stopped", Album.CREATE_WHEN_STOPPED}, {"At breakpoints", Album.CREATE_AT_BEAKPOINTS}}, getFieldEditorParent()));
-		{
-			IntegerFieldEditor integerFieldEditor = new IntegerFieldEditor(Album.PREF_VARIABLE_CAPTURE_DEPTH, "Variable expansion level:", getFieldEditorParent());
-			integerFieldEditor.setValidRange(1, 500);
-			addField(integerFieldEditor);
-		}
+		addField(new ComboFieldEditor(Album.PREF_CREATION_CONTROL, "Create snapshots:",
+									  new String[][]{{"Manually", Album.CREATE_MANUAL},
+													 {"When stopped", Album.CREATE_WHEN_STOPPED},
+													 {"At breakpoints", Album.CREATE_AT_BEAKPOINTS}},
+													 getFieldEditorParent()));
+		IntegerFieldEditor integerFieldEditor
+		  = new IntegerFieldEditor(Album.PREF_VARIABLE_CAPTURE_DEPTH,
+								   "Variable expansion level:",
+								   getFieldEditorParent());
+		integerFieldEditor.setValidRange(1, 500);
+		addField(integerFieldEditor);
+
+//		addField(new BooleanFieldEditor(Album.PREF_RESOLVE_OPAQUE_TYPE,
+//										"Resolve Opaque Types",
+//										getFieldEditorParent()));
 	}
 
 	@Override
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugPreferenceInitializer.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugPreferenceInitializer.java
index 5a78b25..4edacc4 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugPreferenceInitializer.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugPreferenceInitializer.java
@@ -25,6 +25,7 @@
 		node.putInt(Album.PREF_VARIABLE_CAPTURE_DEPTH, 5);
 		node.put(Album.PREF_CREATION_CONTROL, Album.CREATE_MANUAL);
 		node.putBoolean(FormatExtensionManager.VARIABLE_FORMATS_ENABLED, FormatExtensionManager.VARIABLE_FORMATS_ENABLED_DEFAULT);
+		node.putBoolean(PersistentCache.USE_PERSISTENT_CACHE, true);
 	}
 
 }
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugger.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugger.java
index 2fd0805..4d7c046 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugger.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugger.java
@@ -17,9 +17,9 @@
 import org.eclipse.cdt.debug.edc.tcf.extension.services.LoggingProxy;
 import org.eclipse.cdt.debug.edc.tcf.extension.services.SettingsProxy;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.scripting.ScriptingPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Plugin;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
@@ -31,6 +31,7 @@
 import org.eclipse.tm.tcf.protocol.Protocol;
 import org.eclipse.tm.tcf.protocol.Protocol.ChannelOpenListener;
 import org.osgi.framework.BundleContext;
+import org.osgi.service.prefs.BackingStoreException;
 import org.osgi.util.tracker.ServiceTracker;
 
 /**
@@ -45,6 +46,9 @@
 	// The shared instance
 	private static EDCDebugger plugin;
 
+	public static final String EDC_RESOLVE_OPAQUE_TYPES = PLUGIN_ID + ".resolve_opaque_types"; //$NON-NLS-1$
+	public static final String EDC_RESOLVE_RTTI_TYPES   = PLUGIN_ID + ".resolve_rtti_types"; //$NON-NLS-1$
+
 	/** Platform facility used to trace. Lock {@link #traceLock} before accessing. */
 	private volatile DebugTrace trace;
 	
@@ -253,5 +257,49 @@
 	public static IEclipsePreferences getPrefs(String qualifier)
 	{
 	 	return InstanceScope.INSTANCE.getNode(qualifier);
+}
+	public static void setEnableDebuggerCache(boolean newSetting) {
+		IEclipsePreferences scope = EDCDebugger.getPrefs(EDCDebugger.PLUGIN_ID);
+		scope.putBoolean(PersistentCache.USE_PERSISTENT_CACHE, newSetting);
+		try {
+			scope.flush();
+		} catch (BackingStoreException e) {
+			EDCDebugger.getMessageLogger().logError(null, e);
+		}
+	}
+
+	public static boolean getEnableDebuggerCache() {
+		return Platform.getPreferencesService().getBoolean(EDCDebugger.PLUGIN_ID,
+				PersistentCache.USE_PERSISTENT_CACHE, true, null);
+	}
+
+	public static void setResolveOpaqueType(boolean newSetting) {
+		IEclipsePreferences scope = EDCDebugger.getPrefs(EDCDebugger.PLUGIN_ID);
+		scope.putBoolean(EDCDebugger.EDC_RESOLVE_OPAQUE_TYPES, newSetting);
+		try {
+			scope.flush();
+		} catch (BackingStoreException e) {
+			EDCDebugger.getMessageLogger().logError(null, e);
+		}
+	}
+
+	public static boolean getResolveOpaqueTypes() {
+		return Platform.getPreferencesService().getBoolean(EDCDebugger.PLUGIN_ID,
+				EDCDebugger.EDC_RESOLVE_OPAQUE_TYPES, false, null);
+	}
+
+	public static void setResolveRttiTypes(boolean newSetting) {
+		IEclipsePreferences scope = EDCDebugger.getPrefs(EDCDebugger.PLUGIN_ID);
+		scope.putBoolean(EDCDebugger.EDC_RESOLVE_RTTI_TYPES, newSetting);
+		try {
+			scope.flush();
+		} catch (BackingStoreException e) {
+			EDCDebugger.getMessageLogger().logError(null, e);
+		}
+	}
+
+	public static boolean getResolveRttiTypes() {
+		return Platform.getPreferencesService().getBoolean(EDCDebugger.PLUGIN_ID,
+				EDCDebugger.EDC_RESOLVE_RTTI_TYPES, false, null);
 	}
 }
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/PersistentCache.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/PersistentCache.java
index 4092cb6..b10dcf7 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/PersistentCache.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/PersistentCache.java
@@ -27,6 +27,8 @@
 
 public class PersistentCache {
 
+	public static final String USE_PERSISTENT_CACHE = "use_persistent_cache"; //$NON-NLS-1$
+
 	private class CacheEntry {
 
 		private String identifier;
@@ -120,7 +122,10 @@
 	}
 
 	synchronized public <T> T getCachedData(String cacheIdentifier, Class<T> expectedClass, long freshness) {
-	// 	freshness  = 0;
+		
+		if (!EDCDebugger.getEnableDebuggerCache())
+			freshness  = 0;
+		
 		CacheEntry cache = caches.get(cacheIdentifier);
 		
 		if (cache == null)