Improved tracing during breakpoint resolution.
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/BreakpointAttributeTranslator.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/BreakpointAttributeTranslator.java
index 2d472af..0b7119b 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/BreakpointAttributeTranslator.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/BreakpointAttributeTranslator.java
@@ -20,6 +20,7 @@
 import org.eclipse.cdt.debug.core.model.ICLineBreakpoint;
 import org.eclipse.cdt.debug.core.model.ICWatchpoint;
 import org.eclipse.cdt.debug.edc.internal.EDCDebugger;
+import org.eclipse.cdt.debug.edc.internal.EDCTrace;
 import org.eclipse.cdt.debug.edc.internal.services.dsf.Modules.ModuleDMC;
 import org.eclipse.cdt.debug.edc.launch.EDCLaunch;
 import org.eclipse.cdt.debug.edc.services.ITargetEnvironment;
@@ -185,10 +186,14 @@
 		
     	final List<Map<String, Object>>	targetBPAttrs = new ArrayList<Map<String, Object>>(1);
 
+		if (EDCTrace.BREAKPOINTS_TRACE_ON) { EDCTrace.getTrace().traceEntry(null,
+				"Resolving breakpoint " + EDCTrace.fixArg(breakpoint) + " in context " + EDCTrace.fixArg(context)); }
+
     	if (dsfSession == null) {
     		// already disposed
 			drm.setData(targetBPAttrs);
 			drm.done();
+			if (EDCTrace.BREAKPOINTS_TRACE_ON) {EDCTrace.getTrace().traceExit(null, "null session");}
 			return;
     	}
     	
@@ -244,6 +249,8 @@
 			ISymbolDMContext sym_dmc = DMContexts.getAncestorOfType(context, ISymbolDMContext.class);
 
 			String compileFile = EDCLaunch.getLaunchForSession(dsfSession.getId()).getCompilationPath(bpFile);
+			if (EDCTrace.BREAKPOINTS_TRACE_ON) { EDCTrace.getTrace().trace(null,
+					"BP file: " + bpFile + " Compile file: " + compileFile); }
 
 			/*
 			 * Look for code lines within five lines above and below the line in
@@ -257,6 +264,8 @@
 					if (! isSuccess()) {
 						drm.setStatus(getStatus());
 						drm.done();
+						if (EDCTrace.BREAKPOINTS_TRACE_ON) { EDCTrace.getTrace().trace(null,
+								"findClosestLineWithCode failed: " + drm.getStatus()); }
 						return;
 					}
 					
@@ -330,6 +339,7 @@
 				}
 			});
 		}
+		if (EDCTrace.BREAKPOINTS_TRACE_ON) {EDCTrace.getTrace().traceExit(null);}
 	}
 
 	public Map<String, Object> getAllBreakpointAttributes(IBreakpoint platformBP, boolean bpManagerEnabled)
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Modules.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Modules.java
index dd9c1a6..0068959 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Modules.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Modules.java
@@ -25,6 +25,7 @@
 import org.eclipse.cdt.core.IAddress;
 import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator;
 import org.eclipse.cdt.debug.edc.internal.EDCDebugger;
+import org.eclipse.cdt.debug.edc.internal.EDCTrace;
 import org.eclipse.cdt.debug.edc.internal.PathUtils;
 import org.eclipse.cdt.debug.edc.internal.services.dsf.RunControl.ExecutionDMC;
 import org.eclipse.cdt.debug.edc.internal.snapshot.SnapshotUtils;
@@ -818,6 +819,9 @@
 			DataRequestMonitor<ILineAddresses> rm) {
 		IModuleDMContext[] moduleList = null;
 
+		if (EDCTrace.BREAKPOINTS_TRACE_ON) { EDCTrace.getTrace().traceEntry(null,
+				"Find closest line with code. context: " + EDCTrace.fixArg(symCtx) + " file: " + file + " anchor: " + anchor + " limit: " + neighbor_limit); }
+
 		if (symCtx instanceof IEDCExecutionDMC) {
 			String symContextID = ((IEDCDMContext) symCtx).getID();
 			moduleList = getModulesForContext(symContextID);
@@ -829,6 +833,8 @@
 			rm.setStatus(new Status(IStatus.ERROR, EDCDebugger.PLUGIN_ID, REQUEST_FAILED, MessageFormat.format(
 					"Unknown class implementing ISymbolDMContext : {0}", symCtx.getClass().getName()), null));
 			rm.done();
+			if (EDCTrace.BREAKPOINTS_TRACE_ON) { EDCTrace.getTrace().traceExit(null,
+					rm.getStatus()); }
 			return;
 		}
 
@@ -838,6 +844,9 @@
 			ModuleDMC mdmc = (ModuleDMC) module;
 			IEDCSymbolReader reader = mdmc.getSymbolReader();
 
+			if (EDCTrace.BREAKPOINTS_TRACE_ON) { EDCTrace.getTrace().trace(null,
+					"module: " + mdmc + " reader: " + reader); }
+
 			if (reader == null) 
 				continue;
 
@@ -850,7 +859,11 @@
 			@SuppressWarnings("unchecked")
 			Set<String> noFileCachedData = EDCDebugger.getDefault().getCache().getCachedData(noFileCacheKey, Set.class, reader.getModificationDate());
 			if (noFileCachedData != null && noFileCachedData.contains(file))
+			{
+				if (EDCTrace.BREAKPOINTS_TRACE_ON) { EDCTrace.getTrace().trace(null,
+						"Persistent cache says file not used by module"); }
 				continue; // We have already determined that this file is not used by this module, don't bother checking again.
+			}
 			
 			@SuppressWarnings("unchecked")
 			Map<String, List<ILineAddresses>> cachedData = EDCDebugger.getDefault().getCache().getCachedData(cacheKey, Map.class, reader.getModificationDate());
@@ -868,6 +881,8 @@
 						noFileCachedData = new HashSet<String>();
 					noFileCachedData.add(file);
 					EDCDebugger.getDefault().getCache().putCachedData(noFileCacheKey, (Serializable) noFileCachedData, reader.getModificationDate());				
+					if (EDCTrace.BREAKPOINTS_TRACE_ON) { EDCTrace.getTrace().trace(null,
+					"File not used by module"); }
 					continue;
 				}
 			
@@ -875,11 +890,17 @@
 						PathUtils.createPath(file),	anchor, neighbor_limit);
 
 				if (codeLines == null)
+				{
+					if (EDCTrace.BREAKPOINTS_TRACE_ON) { EDCTrace.getTrace().trace(null,
+					"codeLines == null"); }
 					continue;	// should not happen
+				}
 				
 				// Cache code lines (with their link addresses), whether we find it or not.
 				cache.put(file + anchor, codeLines);
 				EDCDebugger.getDefault().getCache().putCachedData(cacheKey, (Serializable) cache, reader.getModificationDate());				
+				if (EDCTrace.BREAKPOINTS_TRACE_ON) { EDCTrace.getTrace().trace(null,
+						"codeLines: " + codeLines); }
 			}
 
 			// convert addresses to runtime ones.