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.