import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
+import java.util.logging.Logger;
import java.util.stream.Collectors;
import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.tracecompass.common.core.log.TraceCompassLog;
import org.eclipse.tracecompass.lttng2.ust.core.analysis.debuginfo.SourceCallsite;
import org.eclipse.tracecompass.tmf.core.event.lookup.TmfCallsite;
*/
public final class FileOffsetMapper {
+ private static final Logger LOGGER = TraceCompassLog.getLogger(FileOffsetMapper.class);
+
private static final String DISCRIMINATOR = "\\(discriminator.*\\)"; //$NON-NLS-1$
private static final String ADDR2LINE_EXECUTABLE = "addr2line"; //$NON-NLS-1$
Objects.equal(fBuildId, other.fBuildId) &&
Objects.equal(fOffset, other.fOffset);
}
+
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this)
+ .add("fFilePath", fFilePath) //$NON-NLS-1$
+ .add("fBuildId", fBuildId) //$NON-NLS-1$
+ .add("fOffset", String.format("0x%h", fOffset)) //$NON-NLS-1$ //$NON-NLS-2$
+ .toString();
+ }
}
/**
.build(new CacheLoader<FileOffset, @Nullable Iterable<SourceCallsite>>() {
@Override
public @Nullable Iterable<SourceCallsite> load(FileOffset fo) {
+ LOGGER.fine(() -> "[FileOffsetMapper:CacheMiss] file/offset=" + fo.toString()); //$NON-NLS-1$
return getCallsiteFromOffsetWithAddr2line(fo);
}
}));
* the "highest" inlining location, down to the initial definition.
*/
public static @Nullable Iterable<SourceCallsite> getCallsiteFromOffset(File file, @Nullable String buildId, long offset) {
+ LOGGER.finer(() -> String.format("[FileOffsetMapper:Request] file=%s, buildId=%s, offset=0x%h", //$NON-NLS-1$
+ file.toString(), buildId, offset));
+
if (!Files.exists((file.toPath()))) {
+ LOGGER.finer(() -> "[FileOffsetMapper:RequestFailed] File not found"); //$NON-NLS-1$
return null;
}
// TODO We should also eventually verify that the passed buildId matches
// the file we are attempting to open.
-
FileOffset fo = new FileOffset(checkNotNull(file.toString()), buildId, offset);
- return CALLSITE_CACHE.getUnchecked(fo);
+
+ Iterable<SourceCallsite> callsites = CALLSITE_CACHE.getUnchecked(fo);
+ LOGGER.finer(() -> String.format("[FileOffsetMapper:RequestComplete] callsites=%s", callsites)); //$NON-NLS-1$
+ return callsites;
}
private static @Nullable Iterable<SourceCallsite> getCallsiteFromOffsetWithAddr2line(FileOffset fo) {