From: jy.exe.lee Date: Tue, 26 Jun 2012 04:51:13 +0000 (+0900) Subject: [Title] Callstack bug fix X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a2b4a7215935a5668f805e82d6c63858863dbbb0;p=sdk%2Ftools%2Fdynamic-analyzer.git [Title] Callstack bug fix [Type] bug fix [Module] DynamicAnalyzer [Priority] major [CQ#] [Redmine#] [Problem] [Cause] [Solution] [TestCase] --- diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java index 8fb793c..993f274 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java @@ -47,7 +47,7 @@ public class LogSpliter { private static List userCallstack = null; private static String initialFunc = null; - private static String userFunctionPosition = ""; //$NON-NLS-1$ + private static String userFunctionBin = null; private static boolean dropCallTraceLog = false; @@ -61,6 +61,7 @@ public class LogSpliter { pid = null; initialFunc = null; userCallstack = null; + userFunctionBin = null; } public static List getUserCallstack() { @@ -228,7 +229,11 @@ public class LogSpliter { if (null == selfSymbol) { selfSymbol = SymbolManager.addr2func(binPath, selfAddr, isPieBuild, baseAddr); + // FIXME : demangling debug + // String prevSelf = selfSymbol; selfSymbol = SymbolNameDemangler.nameDemangle(selfSymbol); + // System.out.println("Demangling in makeCallstack : " + prevSelf + // + " to " + selfSymbol); selfSymbol = getUserFunctionPosition() + AnalyzerConstants.CALLSTACK_API_TOKEN_STRING + selfSymbol; addrMap.put(self, new String(selfSymbol)); @@ -431,19 +436,29 @@ public class LogSpliter { if (funcName.isEmpty()) { continue; } + String[] name = funcName .split(AnalyzerConstants.CALLSTACK_API_OFFSET_TOKEN); + addrMap.put(addr, new String(name[0])); CallStackApi cas = new CallStackApi(addr, name[0]); addrList.add(cas); } - if (checkUserCall(funcName) && userFunctionPosition.isEmpty()) { + + if (checkUserCall(funcName) + && (userFunctionBin == null || userFunctionBin.isEmpty())) { + int appType = Integer.parseInt(AnalyzerManager.getProject() + .getAppInfo().get(AnalyzerConstants.APP_INFO_APP_TYPE)); String[] name = funcName .split(AnalyzerConstants.CALLSTACK_API_OFFSET_TOKEN); String input[] = name[0] .split(AnalyzerConstants.CALLSTACK_API_TOKEN); - userFunctionPosition = new String(input[0]); - System.out.println("set ufp " + userFunctionPosition); //$NON-NLS-1$ + if (appType != AnalyzerConstants.APP_TYPE_OSP) { + userFunctionBin = new String(input[0]); + } else { + userFunctionBin = new String(input[0] + ".exe"); + } + // System.out.println("set ufp " + userFunctionBin); //$NON-NLS-1$ } cd.getAddrs().add(addr); } @@ -521,11 +536,11 @@ public class LogSpliter { } public static void setUserFunctionPosition(String path) { - userFunctionPosition = path; + userFunctionBin = path; } public static String getUserFunctionPosition() { - return userFunctionPosition; + return userFunctionBin; } public static boolean checkUserCall(String input) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/MessageProcess.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/MessageProcess.java index bd47ab4..1964151 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/MessageProcess.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/MessageProcess.java @@ -87,7 +87,7 @@ public class MessageProcess { public void processMessage(String message) { // DO NOT DELETE : for debugging - // System.out.println("count " + messageCount + ": " + message); +// System.out.println("count " + messageCount + ": " + message); try { String[] messages = message.split(AnalyzerConstants.CMD_SPLIT_READ, 2); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/AnalyzerConstants.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/AnalyzerConstants.java index 9eefb77..a98d87b 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/AnalyzerConstants.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/AnalyzerConstants.java @@ -8,7 +8,7 @@ import org.tizen.dynamicanalyzer.nl.AnalyzerLabels; public class AnalyzerConstants { public static final String VERSION = "0.4"; //$NON-NLS-1$ - public static final boolean CHECK_INTERNAL = false; + public static final boolean CHECK_INTERNAL = true; /* special character */ public static final String EMPTY = ""; //$NON-NLS-1$ diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/SnapshotView.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/SnapshotView.java index ea1d256..3145e0f 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/SnapshotView.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/SnapshotView.java @@ -125,7 +125,7 @@ public class SnapshotView extends DAView { data.width = 138; data.height = 230; snapshot.setLayoutData(data); - // FIXME + // FIXME : not supported snapshot.setEnable(false); // icon area diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/filePage/fileChart/DAFileChart.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/filePage/fileChart/DAFileChart.java index 32d2d34..0b7dc9f 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/filePage/fileChart/DAFileChart.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/filePage/fileChart/DAFileChart.java @@ -420,7 +420,7 @@ public class DAFileChart extends Composite { } public void updateOtherView(int viewId) { - // FIXME : over head check + // FIXME : overhead check GridItem[] sels = tree.getSelection(); DASelectionData selData = new DASelectionData(FileChartView.ID, 0, 0, sels, tree); diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/filePage/fileChart/DAFileChartCellRenderer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/filePage/fileChart/DAFileChartCellRenderer.java index 907c3d8..f38d2ce 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/filePage/fileChart/DAFileChartCellRenderer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/filePage/fileChart/DAFileChartCellRenderer.java @@ -179,7 +179,6 @@ public class DAFileChartCellRenderer extends DefaultCellRenderer { private void drawRects(GC gc, FileChartItemData data, Rectangle rect) { List fcData = data.getData(); int size = fcData.size(); - // FIXME : 10 means margin int x = rect.x + FileChartManager.FILE_CHART_START_MARGIN; int y = (rect.y + 7); long startTime = start; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/tables/CallstackTable.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/tables/CallstackTable.java index a0c615a..138c045 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/tables/CallstackTable.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/tables/CallstackTable.java @@ -12,6 +12,8 @@ import org.eclipse.swt.widgets.Composite; import org.tizen.dynamicanalyzer.AnalyzerManager; import org.tizen.dynamicanalyzer.ColorResources; import org.tizen.dynamicanalyzer.LogSpliter; +import org.tizen.dynamicanalyzer.SymbolManager; +import org.tizen.dynamicanalyzer.SymbolNameDemangler; import org.tizen.dynamicanalyzer.constants.AnalyzerConstants; import org.tizen.dynamicanalyzer.constants.LogCenterConstants; import org.tizen.dynamicanalyzer.model.CallStackData; @@ -132,6 +134,20 @@ public class CallstackTable extends DATableComposite { String fName = InformationViewLables.CALLSTACK_TABLE_UNKNOWN; if (apiData.length > 1) { fName = new String(apiData[1]); + } else { + String binPath = AnalyzerManager.getProject() + .getBinaryPath(); + boolean isPieBuild = AnalyzerManager.getProject() + .isPieBuild(); + String baseAddr = AnalyzerManager.getProject() + .getBaseAddress(); + String addrStr = Long.toString(addrs.get(i)); + if (AnalyzerManager.isInBinaryRange(addrStr)) { + fName = SymbolManager.addr2func(binPath, addrStr, + isPieBuild, baseAddr); + fName = SymbolNameDemangler.nameDemangle(fName); + } + System.out.println(fName + " " + path); } if (LogSpliter.checkUserCall(path)) {