[Title] Callstack bug fix
authorjy.exe.lee <jy.exe.lee@samsung.com>
Tue, 26 Jun 2012 04:51:13 +0000 (13:51 +0900)
committerjy.exe.lee <jy.exe.lee@samsung.com>
Tue, 26 Jun 2012 04:51:13 +0000 (13:51 +0900)
[Type] bug fix
[Module] DynamicAnalyzer
[Priority] major
[CQ#]
[Redmine#]
[Problem]
[Cause]
[Solution]
[TestCase]

org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/LogSpliter.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/MessageProcess.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/constants/AnalyzerConstants.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/SnapshotView.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/filePage/fileChart/DAFileChart.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/views/filePage/fileChart/DAFileChartCellRenderer.java
org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/widgets/tables/CallstackTable.java

index 8fb793c..993f274 100644 (file)
@@ -47,7 +47,7 @@ public class LogSpliter {
 
        private static List<CallStackApi> 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<CallStackApi> 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) {
index bd47ab4..1964151 100644 (file)
@@ -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);
index 9eefb77..a98d87b 100644 (file)
@@ -8,7 +8,7 @@ import org.tizen.dynamicanalyzer.nl.AnalyzerLabels;
 public class AnalyzerConstants {\r
 \r
        public static final String VERSION = "0.4"; //$NON-NLS-1$\r
-       public static final boolean CHECK_INTERNAL = false;\r
+       public static final boolean CHECK_INTERNAL = true;\r
 \r
        /* special character */\r
        public static final String EMPTY = ""; //$NON-NLS-1$\r
index ea1d256..3145e0f 100644 (file)
@@ -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
index 32d2d34..0b7dc9f 100644 (file)
@@ -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);
index 907c3d8..f38d2ce 100644 (file)
@@ -179,7 +179,6 @@ public class DAFileChartCellRenderer extends DefaultCellRenderer {
        private void drawRects(GC gc, FileChartItemData data, Rectangle rect) {
                List<FileChartData> 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;
index a0c615a..138c045 100644 (file)
@@ -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)) {