From 7a8bb49ef188f7abc49a63f5ed59a23f7d62cecb Mon Sep 17 00:00:00 2001 From: jooyoul_lee Date: Thu, 9 Jan 2014 13:37:19 +0900 Subject: [PATCH] [Title] refactoring da source [Desc.] [Issue] --- .../dynamic-analyzer/version | 1 - .../ApplicationWorkbenchWindowAdvisor.java | 3 +- .../workbench/WorkbenchPathManager.java | 225 --------------- org.tizen.dynamicanalyzer/plugin.xml | 44 +-- .../dynamicanalyzer/common/AnalyzerManager.java | 2 +- .../dynamicanalyzer/common/AnalyzerPlugin.java | 10 +- .../communicator/Communicator22.java | 2 +- .../communicator/CommunicatorUtils.java | 59 ++++ .../dynamicanalyzer/handlers/ClearHandler.java | 2 +- .../dynamicanalyzer/handlers/ExitHandler.java | 2 +- .../tizen/dynamicanalyzer/model/DeviceInfo.java | 2 +- .../swap/callstack/SWAPCallStackManager.java | 205 +++++++++----- .../swap/communicator/Communicator30.java | 2 +- .../swap/logparser/SWAPLogParser.java | 139 ++++++++- .../swap/platform/BinarySettingManager.java | 112 +++++++- .../swap/platform/ui/BinarySettingProcessor.java | 11 +- .../platform/ui/DeviceExplorer/DeviceExplorer.java | 4 + .../{utils => ui/page}/UpdateViewTimer.java | 2 +- .../ui/toolbar/StopLogProcessor.java | 2 +- .../dynamicanalyzer/ui/toolbar/ToolbarArea.java | 12 - .../tizen/dynamicanalyzer/utils/AnalyzerUtil.java | 312 +-------------------- 21 files changed, 459 insertions(+), 694 deletions(-) delete mode 100644 org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/version delete mode 100644 org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/WorkbenchPathManager.java rename org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/{utils => ui/page}/UpdateViewTimer.java (97%) diff --git a/org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/version b/org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/version deleted file mode 100644 index 38ba203..0000000 --- a/org.tizen.dynamicanalyzer.workbench/dynamic-analyzer/version +++ /dev/null @@ -1 +0,0 @@ -0.5.3.2 diff --git a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/ApplicationWorkbenchWindowAdvisor.java b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/ApplicationWorkbenchWindowAdvisor.java index 7747e1a..702023d 100755 --- a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/ApplicationWorkbenchWindowAdvisor.java +++ b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/ApplicationWorkbenchWindowAdvisor.java @@ -95,7 +95,7 @@ public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); configurer.setInitialSize(new Point(width, height)); configurer.setShowStatusLine(false); - configurer.setShellStyle(SWT.SHELL_TRIM/* | SWT.NO_BACKGROUND */); + configurer.setShellStyle(SWT.SHELL_TRIM); configurer.setShowFastViewBars(false); } @@ -109,6 +109,7 @@ public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { WelcomeDialog dialog = new WelcomeDialog(shell); // FIXME dialog.open(); } + // for pairing : da log - da daemon log PathManager.setLogPostFix(WorkbenchUtils.getLogPostFix()); } diff --git a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/WorkbenchPathManager.java b/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/WorkbenchPathManager.java deleted file mode 100644 index 4530c20..0000000 --- a/org.tizen.dynamicanalyzer.workbench/src/org/tizen/dynamicanalyzer/workbench/WorkbenchPathManager.java +++ /dev/null @@ -1,225 +0,0 @@ -/* - * Dynamic Analyzer - * - * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. - * - * Contact: - * Jooyoul Lee - * Juyoung Kim - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Contributors: - * - S-Core Co., Ltd - * - */ - -package org.tizen.dynamicanalyzer.workbench; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; - -public class WorkbenchPathManager { - - public static final String WIN_INSTALL_NODE = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";//$NON-NLS-1$ - public static final String WIN_INSTALL_KEY = "Local AppData"; //$NON-NLS-1$ - - public static final String LINUX_INSTALL_ENV = "HOME";//$NON-NLS-1$ - public static final String TIZEN_SDK_DATA = "tizen-sdk-data";//$NON-NLS-1$ - public static final String TIZEN_SDK_DATA_PATH = getTizenSdkDataPath(); - public static final String INSTALL = "tizensdkpath"; //$NON-NLS-1$ - public static final String TIZEN_ROOT_PATH = getDefaultRoot(); - public static final String TOOLS_FOLDER_NAME = "tools"; //$NON-NLS-1$ - public static final String DYNAMIC_ANALYZER_FOLDER_NAME = "dynamic-analyzer"; //$NON-NLS-1$ - public static final String SAVE_FOLDER_NAME = "save"; //$NON-NLS-1$ - public static final String LOG_FOLDER_NAME = "logs"; //$NON-NLS-1$ - public static final String DYNAMIC_ANALYZER_INSTALL_PATH = getInstallPath(); - public static final String CONFIG_FOLDER_NAME = "config"; //$NON-NLS-1$ - public static final String CONFIG_FOLDER_PATH = getConfigFolderPath(); - public static final String CONFIG_FILE_NAME = "config"; //$NON-NLS-1$ - - public static final String OS_KEY = "os.name"; //$NON-NLS-1$ - public static final String LINUX = "linux"; //$NON-NLS-1$ - public static final String MAC = "mac"; //$NON-NLS-1$ - public static final String WIN = "win"; //$NON-NLS-1$ - - private static String logPostFix = null; - - public static String getLogPostFix() { - return logPostFix; - } - - public static void setLogPostFix(String postFix) { - logPostFix = postFix; - } - - public static String getRegistryValue(String node, String key) { - BufferedReader br = null; - String value = ""; //$NON-NLS-1$ - - String query = "reg query " + "\"" + node + "\" /v " + "\"" + key + "\""; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - try { - Process process = Runtime.getRuntime().exec(query); - String encoding = System.getProperty("sun.jnu.encoding"); //$NON-NLS-1$ - - br = new BufferedReader(new InputStreamReader( - process.getInputStream(), encoding)); - - String line = null; - while ((line = br.readLine()) != null) { - int index = line.indexOf("REG_SZ"); //$NON-NLS-1$ - if (index >= 0) { - value = line.substring(index + "REG_SZ".length()).trim(); //$NON-NLS-1$ - } - } - } catch (IOException e) { - e.printStackTrace(); - } finally { - if (br != null) { - try { - br.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - return value; - } - - public static String getTizenSdkDataPath() { - String defaultPath = null; - if (isWin()) { - defaultPath = getRegistryValue(WIN_INSTALL_NODE, WIN_INSTALL_KEY) - + File.separator + TIZEN_SDK_DATA; - } else if (isMac()) { - defaultPath = System.getenv(LINUX_INSTALL_ENV) + File.separator - + TIZEN_SDK_DATA; - } else if (isLinux()) { - defaultPath = System.getenv(LINUX_INSTALL_ENV) + File.separator - + TIZEN_SDK_DATA; - } else { - System.out.println("Please check OS and install the Tizen SDK"); //$NON-NLS-1$ - System.exit(-1); - } - return defaultPath; - } - - public static String getDefaultRoot() { - String rootPath = null; - BufferedReader br = null; - String line = null; - try { - rootPath = TIZEN_SDK_DATA_PATH + File.separator + INSTALL; - File file = new File(rootPath); - if (!file.isFile()) { - return null; - } - br = new BufferedReader(new InputStreamReader(new FileInputStream( - file))); - line = br.readLine(); - return line.substring(line.indexOf("=") + 1); //$NON-NLS-1$ - } catch (IOException e) { - System.out.println("Fail to read."); //$NON-NLS-1$ - e.printStackTrace(); - } finally { - if (null != br) { - try { - br.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - - return rootPath; - } - - public static String getInstallPath() { - String installPath = TIZEN_ROOT_PATH; - if (null != installPath) { - installPath += File.separator + TOOLS_FOLDER_NAME + File.separator - + DYNAMIC_ANALYZER_FOLDER_NAME; - } - return installPath; - } - - public static String getSavePath() { - String savePath = TIZEN_SDK_DATA_PATH; - if (null != savePath) { - savePath += File.separator + DYNAMIC_ANALYZER_FOLDER_NAME - + File.separator + SAVE_FOLDER_NAME; - } - return savePath; - } - - public static String getLogsPath() { - String savePath = TIZEN_SDK_DATA_PATH + File.separator - + DYNAMIC_ANALYZER_FOLDER_NAME + File.separator; - if (null != savePath) { - savePath += LOG_FOLDER_NAME; - } - return savePath; - } - - public static String getSdbPath() { - String path = TIZEN_ROOT_PATH; - if (null != path) { - path += File.separator + "tools" + File.separator + "sdb"; //$NON-NLS-1$ //$NON-NLS-2$ - } - return path; - } - - public static String getConfigFolderPath() { - String configFolderPath = DYNAMIC_ANALYZER_INSTALL_PATH; - if (null != configFolderPath) { - configFolderPath += File.separator + CONFIG_FOLDER_NAME; - } - return configFolderPath; - } - - public static String getConfigFilePath() { - String configFilePath = CONFIG_FOLDER_PATH; - - if (null != configFilePath) { - configFilePath += File.separator + CONFIG_FILE_NAME; - } - return configFilePath; - } - - public static void pathCheck() { - if (null == TIZEN_ROOT_PATH) { - System.out.println("Tizen Root Path is null"); //$NON-NLS-1$ - System.exit(-1); - } - } - - private static String getOS() { - return System.getProperty(OS_KEY).toLowerCase(); - } - - public static boolean isLinux() { - return getOS().indexOf(LINUX) >= 0; - } - - public static boolean isMac() { - return getOS().indexOf(MAC) >= 0; - } - - public static boolean isWin() { - return getOS().indexOf(WIN) >= 0; - } -} diff --git a/org.tizen.dynamicanalyzer/plugin.xml b/org.tizen.dynamicanalyzer/plugin.xml index 58ba992..916a758 100644 --- a/org.tizen.dynamicanalyzer/plugin.xml +++ b/org.tizen.dynamicanalyzer/plugin.xml @@ -99,49 +99,7 @@ - - - - - - - - - - - - - - - - - - - - - - + getProjectList() { + public static synchronized List getProjectList() { if (null == projectList) { projectList = new ArrayList(); } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerPlugin.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerPlugin.java index 463c1ab..a87d586 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerPlugin.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/AnalyzerPlugin.java @@ -32,7 +32,6 @@ import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IPartService; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchListener; @@ -42,14 +41,12 @@ import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; import org.tizen.dynamicanalyzer.listeners.AnalyzerPartListener; import org.tizen.dynamicanalyzer.listeners.AnalyzerPerspectiveListener; -import org.tizen.dynamicanalyzer.resources.ColorResources; import org.tizen.dynamicanalyzer.shortcut.ShortCutManager; import org.tizen.dynamicanalyzer.sql.SqlManager; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; public class AnalyzerPlugin extends AbstractUIPlugin { - private static final String THEME_ID = "org.tizen.dynamicanalyzer.theme"; //$NON-NLS-1$ private static AnalyzerPlugin plugin; public static AnalyzerPlugin getDefault() { @@ -67,6 +64,7 @@ public class AnalyzerPlugin extends AbstractUIPlugin { workbench.addWorkbenchListener(new IWorkbenchListener() { @Override public void postShutdown(IWorkbench workbench) { + // for manage temp projects List tempProjects = AnalyzerManager.getProjectList(); int size = tempProjects.size(); for (int i = 0; i < size; i++) { @@ -109,12 +107,6 @@ public class AnalyzerPlugin extends AbstractUIPlugin { IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); window.addPerspectiveListener(new AnalyzerPerspectiveListener()); - // Sets theme and color. - workbench.getThemeManager().setCurrentTheme(THEME_ID); - Shell shell = window.getShell(); - shell.setBackgroundMode(SWT.INHERIT_FORCE); - shell.setBackground(ColorResources.WINDOW_BG_COLOR); - File saveFolder = new File(AnalyzerPaths.TEMP_FOLDER_PATH); if (saveFolder.exists()) { if (AnalyzerUtil.deleteFile(saveFolder)) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/Communicator22.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/Communicator22.java index 262eab2..78531f1 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/Communicator22.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/Communicator22.java @@ -47,6 +47,7 @@ import org.tizen.dynamicanalyzer.swap.channel.control.EventObject; import org.tizen.dynamicanalyzer.swap.channel.control.ReplayEvent; import org.tizen.dynamicanalyzer.ui.file.FileChartManager; import org.tizen.dynamicanalyzer.ui.network.NetworkChartManager; +import org.tizen.dynamicanalyzer.ui.page.UpdateViewTimer; import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler; import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager; import org.tizen.dynamicanalyzer.ui.toolbar.ConfigureManager; @@ -54,7 +55,6 @@ import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea; import org.tizen.dynamicanalyzer.ui.userinterface.UIDataManager; import org.tizen.dynamicanalyzer.uirecorder.UIRecorderTool; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; -import org.tizen.dynamicanalyzer.utils.UpdateViewTimer; public class Communicator22 extends BaseCommunicator { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/CommunicatorUtils.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/CommunicatorUtils.java index a03d700..981aa97 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/CommunicatorUtils.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/communicator/CommunicatorUtils.java @@ -28,9 +28,13 @@ package org.tizen.dynamicanalyzer.communicator; import static org.tizen.sdblib.util.DeviceUtil.isOnline; import static org.tizen.sdblib.util.IOUtil.tryClose; +import java.io.BufferedReader; import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; @@ -466,4 +470,59 @@ public class CommunicatorUtils { } return null; } + + public static List getApiMap(IDevice device) { + String apiFilePath = AnalyzerPaths.TEMP_FOLDER_PATH + File.separator + + device.getSerialNumber() + CommonConstants.UNDERBAR + + AnalyzerConstants.API_NAME_FILE_NAME; + try { + device.setRootUser(true); + } catch (TimeoutException e) { + e.printStackTrace(); + } catch (SdbCommandRejectedException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + SyncResult res = CommunicatorUtils.pull(device, + AnalyzerPaths.DA_API_MAP_PATH, apiFilePath); + if (null != res && res.isOk()) { + System.out.println("api map copying success!!");//$NON-NLS-1$ + } else { + System.out.println("Failed to get " + apiFilePath); //$NON-NLS-1$ + return null; + } + + List apiMap = new ArrayList(); + apiMap.add("unknown"); + + File file = new File(apiFilePath); + if (!file.exists()) { + System.out.println("file open failed..."); + return null; + } + try { + FileInputStream fis = new FileInputStream(file); + InputStreamReader isr = new InputStreamReader(fis); + BufferedReader reader = new BufferedReader(isr); + + String input = null; + while (null != (input = reader.readLine())) { + String[] splitLine = input.trim().split(CommonConstants.SPACE, + 2); + apiMap.add(new String(splitLine[1])); + } + + } catch (FileNotFoundException e) { + e.printStackTrace(); + return null; + } catch (IOException e) { + e.printStackTrace(); + return null; + } catch (ArrayIndexOutOfBoundsException e) { + e.printStackTrace(); + } + return apiMap; + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ClearHandler.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ClearHandler.java index aaab621..c59a95e 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ClearHandler.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ClearHandler.java @@ -34,10 +34,10 @@ import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.logparser.LogInserter; import org.tizen.dynamicanalyzer.sql.SqlManager; import org.tizen.dynamicanalyzer.ui.page.BaseView; +import org.tizen.dynamicanalyzer.ui.page.UpdateViewTimer; import org.tizen.dynamicanalyzer.ui.toolbar.StopLogProcessor; import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; -import org.tizen.dynamicanalyzer.utils.UpdateViewTimer; public class ClearHandler extends AbstractHandler { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ExitHandler.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ExitHandler.java index 8576bda..b25f79a 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ExitHandler.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/handlers/ExitHandler.java @@ -36,10 +36,10 @@ import org.tizen.dynamicanalyzer.communicator.DACommunicator; import org.tizen.dynamicanalyzer.communicator.IDECommunicator; import org.tizen.dynamicanalyzer.logparser.LogInserter; import org.tizen.dynamicanalyzer.swap.logparser.SWAPLogParser; +import org.tizen.dynamicanalyzer.ui.page.UpdateViewTimer; import org.tizen.dynamicanalyzer.ui.toolbar.StopLogProcessor; import org.tizen.dynamicanalyzer.ui.toolbar.ToolbarArea; import org.tizen.dynamicanalyzer.ui.toolbar.opentrace.OpenTraceInputReader; -import org.tizen.dynamicanalyzer.utils.UpdateViewTimer; public class ExitHandler extends AbstractHandler { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/DeviceInfo.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/DeviceInfo.java index b1327e3..c838588 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/DeviceInfo.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/model/DeviceInfo.java @@ -71,7 +71,7 @@ public class DeviceInfo { appInfoHash = new HashMap(); pkgInfoHash = new HashMap(); targetInfo = new TargetInfo(); - apiList = AnalyzerUtil.getApiMap(device); + apiList = CommunicatorUtils.getApiMap(device); } public void setSelectedAppName(String name) { diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/SWAPCallStackManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/SWAPCallStackManager.java index d284af9..ca70686 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/SWAPCallStackManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/callstack/SWAPCallStackManager.java @@ -38,7 +38,11 @@ import java.util.TreeMap; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.common.SymbolManager; +import org.tizen.dynamicanalyzer.communicator.DACommunicator; import org.tizen.dynamicanalyzer.logparser.LogCenterConstants; +import org.tizen.dynamicanalyzer.swap.channel.control.BinaryInfo; +import org.tizen.dynamicanalyzer.swap.channel.data.ProcessInfo; +import org.tizen.dynamicanalyzer.swap.channel.data.ProcessInfoPackage; import org.tizen.dynamicanalyzer.swap.logparser.SWAPLogParser; import org.tizen.dynamicanalyzer.swap.model.data.LogData; import org.tizen.dynamicanalyzer.swap.model.data.ProbeCommonData; @@ -55,7 +59,7 @@ public class SWAPCallStackManager extends BaseCallstackManager { ProfileData log = (ProfileData) input; int pid = log.getPid(); long time = log.getTime(); - + HashMap addrMap = getCallStackApiAddrByPidMap(pid); boolean isPieBuild = AnalyzerUtil.isPieBuild(pid, time); String baseAddr = Long.toString(AnalyzerManager.getProject() @@ -70,9 +74,9 @@ public class SWAPCallStackManager extends BaseCallstackManager { long selfAddr = log.getPcAddr(); long callerAddr = log.getCallerPcAddr(); - + String strSelfAddr = Long.toString(selfAddr); - String strCallerAddr = Long.toString(callerAddr); + String strCallerAddr = Long.toString(callerAddr); CallStackData callstackData = new CallStackData(seq); CallStackUnit selfCallstackUnit = addrMap.get(selfAddr); @@ -93,7 +97,7 @@ public class SWAPCallStackManager extends BaseCallstackManager { List userCallstack = getUserCallstack(tid); int size = userCallstack.size(); TreeMap seqByTimeMap = getSeqTimeByTidMap(tid); - + CallStackUnit callerCallstackUnit = addrMap.get(callerAddr); if (null == callerCallstackUnit) { String strCallerFuncName = SymbolManager.addr2func(sourceBinPath, @@ -111,7 +115,7 @@ public class SWAPCallStackManager extends BaseCallstackManager { if (size == 0) { userCallstack.add(new CallStackItem(selfCallstackUnit, time)); } else { - if (!AnalyzerUtil.isAddrInBinaryRange(pid, time, callerAddr)) { + if (!isAddrInBinaryRange(pid, time, callerAddr)) { CallStackUnit callbackApi = new CallStackUnit( LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_SYMBOL, @@ -127,71 +131,80 @@ public class SWAPCallStackManager extends BaseCallstackManager { LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, defaultCallstackUnit); } -// } else if (callerCallstackUnit.getFunctionName().contains( -// AnalyzerConstants.VIRTUAL_THUNK)) { -// CallStackUnit callbackApi = new CallStackUnit( -// LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, -// LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_SYMBOL, -// log); -// userCallstack.add(new CallStackItem(callbackApi)); -// if (addrMap -// .get(LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR) == null) { -// CallStackUnit defaultCallstackUnit = new CallStackUnit( -// LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, -// LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_SYMBOL, -// log); -// addrMap.put( -// LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, -// defaultCallstackUnit); -// } -// userCallstack.add(new CallStackItem(callerCallstackUnit)); + // } else if + // (callerCallstackUnit.getFunctionName().contains( + // AnalyzerConstants.VIRTUAL_THUNK)) { + // CallStackUnit callbackApi = new CallStackUnit( + // LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, + // LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_SYMBOL, + // log); + // userCallstack.add(new CallStackItem(callbackApi)); + // if (addrMap + // .get(LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR) + // == null) { + // CallStackUnit defaultCallstackUnit = new CallStackUnit( + // LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, + // LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_SYMBOL, + // log); + // addrMap.put( + // LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, + // defaultCallstackUnit); + // } + // userCallstack.add(new + // CallStackItem(callerCallstackUnit)); } else { CallStackUnit callerCsa = addrMap.get(callerAddr); if (null == callerCsa) { - callerCsa = userCallstack.get(size - 1).getCallStackUnit(); + callerCsa = userCallstack.get(size - 1) + .getCallStackUnit(); callerCsa.setFunctionStartAddr(callerCsa.getAddr()); callerCsa.setAddr(callerAddr); } else { - CallStackItem topCallstackItem = userCallstack.get( - size - 1); - callerCsa.setFunctionStartAddr(topCallstackItem.getCallStackUnit().getAddr()); - userCallstack.set(size - 1, new CallStackItem(callerCsa, topCallstackItem.getStartTime())); + CallStackItem topCallstackItem = userCallstack + .get(size - 1); + callerCsa.setFunctionStartAddr(topCallstackItem + .getCallStackUnit().getAddr()); + userCallstack.set(size - 1, new CallStackItem( + callerCsa, topCallstackItem.getStartTime())); } } userCallstack.add(new CallStackItem(selfCallstackUnit, time)); } size = userCallstack.size(); for (int i = size - 1; i >= 0; i--) { - callstackData.getAddrs().add(userCallstack.get(i).getCallStackUnit().getAddr()); + callstackData.getAddrs().add( + userCallstack.get(i).getCallStackUnit().getAddr()); } getCallStackDataBySeqMap().put(seq, callstackData); - seqByTimeMap.put(time, seq); + seqByTimeMap.put(time, seq); } else if (eventType == MSG_FUNCTION_EXIT) { if (size == 0) { // this case only range profiling, other time is bug return; } - CallStackUnit removeCallStackUnit = userCallstack.get(size - 1).getCallStackUnit(); + CallStackUnit removeCallStackUnit = userCallstack.get(size - 1) + .getCallStackUnit(); if (selfCallstackUnit.getFunctionName().equals( removeCallStackUnit.getFunctionName())) { userCallstack.remove(size - 1); -// if (size - 2 > 0) { -// if (callerCallstackUnit.getFunctionName().contains( -// AnalyzerConstants.VIRTUAL_THUNK)) { -// if (callerCallstackUnit.getFunctionName().equals( -// userCallstack.get(size - 2).getCallStackUnit().getFunctionName())) { -// userCallstack.remove(size - 2); -// } else { -// System.out -// .println("makeUserCallstack : [virtual thunk] EXIT caller is not the same" -// + "as top of user callstack after remove EXIT self"); -// } -// } -// } + // if (size - 2 > 0) { + // if (callerCallstackUnit.getFunctionName().contains( + // AnalyzerConstants.VIRTUAL_THUNK)) { + // if (callerCallstackUnit.getFunctionName().equals( + // userCallstack.get(size - + // 2).getCallStackUnit().getFunctionName())) { + // userCallstack.remove(size - 2); + // } else { + // System.out + // .println("makeUserCallstack : [virtual thunk] EXIT caller is not the same" + // + "as top of user callstack after remove EXIT self"); + // } + // } + // } size = userCallstack.size(); if (size - 1 > 0) { - CallStackUnit checkCallStackUnit = userCallstack - .get(size - 1).getCallStackUnit(); + CallStackUnit checkCallStackUnit = userCallstack.get( + size - 1).getCallStackUnit(); if (checkCallStackUnit.getFunctionName().equals( LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC)) { userCallstack.remove(size - 1); @@ -205,22 +218,25 @@ public class SWAPCallStackManager extends BaseCallstackManager { .getFunctionStartAddr(); CallStackUnit callerCsa = addrMap.get(prevSelfAddr); if (null == callerCsa) { - prevCallstackItem.getCallStackUnit().setAddr(prevSelfAddr); + prevCallstackItem.getCallStackUnit().setAddr( + prevSelfAddr); } else { - userCallstack.set(size - 1, new CallStackItem(callerCsa, prevCallstackItem.getStartTime())); + userCallstack.set(size - 1, new CallStackItem( + callerCsa, prevCallstackItem.getStartTime())); } } for (int i = size - 1; i >= 0; i--) { - callstackData.getAddrs().add(userCallstack.get(i).getCallStackUnit().getAddr()); + callstackData.getAddrs().add( + userCallstack.get(i).getCallStackUnit().getAddr()); } getCallStackDataBySeqMap().put(seq, callstackData); - seqByTimeMap.put(time, seq); + seqByTimeMap.put(time, seq); } else { System.out .println("makeUserCallstack : EXIT self is not the same as top of user callstack"); } if (AnalyzerManager.isOsp()) { - // String apiName = input[LogCenterConstants.APINAME_INDEX]; + // String apiName = input[LogCenterConstants.APINAME_INDEX]; String apiName = log.getApiName(); if (apiName.equals("OspMain")) { //$NON-NLS-1$ SWAPLogParser.setDropCallTraceLog(true); @@ -237,25 +253,26 @@ public class SWAPCallStackManager extends BaseCallstackManager { pData = (ProfileData) inputData; isProfileData = true; } else { - log = (ProbeCommonData) inputData; + log = (ProbeCommonData) inputData; } - - HashMap addrMap = getCallStackApiAddrByPidMap(inputData.getPid()); + + HashMap addrMap = getCallStackApiAddrByPidMap(inputData + .getPid()); int pid; long time; boolean isPieBuild; String baseAddr, sourceBinPath; - if(isProfileData) { + if (isProfileData) { pid = pData.getPid(); time = pData.getTime(); - isPieBuild = AnalyzerUtil.isPieBuild(pid, time); + isPieBuild = isPieBuild(pid, time); baseAddr = Long.toString(AnalyzerManager.getProject() .getBaseAddress(pid, time)); sourceBinPath = AnalyzerUtil.getBinarySourcePath(pid, time); } else { pid = log.getPid(); - time = log.getTime(); - isPieBuild = AnalyzerUtil.isPieBuild(pid, time); + time = log.getTime(); + isPieBuild = isPieBuild(pid, time); baseAddr = Long.toString(AnalyzerManager.getProject() .getBaseAddress(pid, time)); sourceBinPath = AnalyzerUtil.getBinarySourcePath(pid, time); @@ -268,12 +285,12 @@ public class SWAPCallStackManager extends BaseCallstackManager { int seq = inputData.getSeq(); int tid; long callerAddr; - if(isProfileData) { + if (isProfileData) { tid = pData.getTid(); - callerAddr = pData.getCallerPcAddr(); + callerAddr = pData.getCallerPcAddr(); } else { tid = log.getTid(); - callerAddr = log.getCallerPcAddr(); + callerAddr = log.getCallerPcAddr(); } // if (!strCallerAddr.isEmpty()) { @@ -299,11 +316,11 @@ public class SWAPCallStackManager extends BaseCallstackManager { CallStackData callstackData = new CallStackData(seq); - if ((size == 0) || - (!AnalyzerUtil.isAddrInBinaryRange(pid, time, callerAddr))) { + if ((size == 0) || (!isAddrInBinaryRange(pid, time, callerAddr))) { CallStackUnit callbackApi = new CallStackUnit( LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR, - LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_SYMBOL, inputData); + LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_SYMBOL, + inputData); probeCallstack.add(new CallStackItem(callbackApi)); if (addrMap .get(LogCenterConstants.USER_FUNCTION_CALLBACK_FUNC_ADDR) == null) { @@ -318,8 +335,8 @@ public class SWAPCallStackManager extends BaseCallstackManager { } else { CallStackUnit callerCallstackUnit = addrMap.get(callerAddr); if (null == callerCallstackUnit) { - String strCallerFuncName = SymbolManager.addr2func(sourceBinPath, - strCallerAddr, isPieBuild, baseAddr); + String strCallerFuncName = SymbolManager.addr2func( + sourceBinPath, strCallerAddr, isPieBuild, baseAddr); String strCallerSymbol = getUserFunctionPosition(pid, time) + AnalyzerConstants.CALLSTACK_API_TOKEN_STRING + strCallerFuncName; @@ -328,10 +345,12 @@ public class SWAPCallStackManager extends BaseCallstackManager { addrMap.put(callerAddr, callerCallstackUnit); } - CallStackUnit topUserCallstack = probeCallstack.get(size - 1).getCallStackUnit(); + CallStackUnit topUserCallstack = probeCallstack.get(size - 1) + .getCallStackUnit(); if (callerCallstackUnit.getFunctionName().equals( topUserCallstack.getFunctionName())) { - probeCallstack.set(size - 1, new CallStackItem(callerCallstackUnit)); + probeCallstack.set(size - 1, new CallStackItem( + callerCallstackUnit)); } else { System.out .println("bug : probe caller is not the same as top of user callstack"); //$NON-NLS-1$ @@ -340,7 +359,8 @@ public class SWAPCallStackManager extends BaseCallstackManager { size = probeCallstack.size(); for (int i = size - 1; i >= 0; i--) { - callstackData.getAddrs().add(probeCallstack.get(i).getCallStackUnit().getAddr()); + callstackData.getAddrs().add( + probeCallstack.get(i).getCallStackUnit().getAddr()); } getCallStackDataBySeqMap().put(seq, callstackData); @@ -349,10 +369,11 @@ public class SWAPCallStackManager extends BaseCallstackManager { // check irregular enter/exit log (multiple logs from 1 function call) public boolean isIrregularUserCall(LogData log) { ProfileData input = (ProfileData) log; - HashMap addrMap = getCallStackApiAddrByPidMap(input.getPid()); + HashMap addrMap = getCallStackApiAddrByPidMap(input + .getPid()); HashMap dupUserCallMap = getDupUserCallByTidMap(); - boolean isPieBuild = AnalyzerUtil.isPieBuild(input.getPid(), + boolean isPieBuild = isPieBuild(input.getPid(), input.getTime()); String baseAddr = Long.toString(AnalyzerManager.getProject() .getBaseAddress(input.getPid(), log.getTime())); @@ -372,8 +393,8 @@ public class SWAPCallStackManager extends BaseCallstackManager { if (null == selfCallstackUnit) { String strSelfFuncName = SymbolManager.addr2func(sourceBinPath, strSelfAddr, isPieBuild, baseAddr); - String strSelfSymbol = getUserFunctionPosition( - input.getPid(), input.getTime()) + String strSelfSymbol = getUserFunctionPosition(input.getPid(), + input.getTime()) + AnalyzerConstants.CALLSTACK_API_TOKEN_STRING + strSelfFuncName; selfCallstackUnit = new CallStackUnit(selfAddr, strSelfSymbol, log); @@ -386,7 +407,8 @@ public class SWAPCallStackManager extends BaseCallstackManager { int eventType = input.getId(); if (size > 0) { if (eventType == MSG_FUNCTION_ENTRY) { - CallStackUnit topCallstackUnit = userCallstack.get(size - 1).getCallStackUnit(); + CallStackUnit topCallstackUnit = userCallstack.get(size - 1) + .getCallStackUnit(); if (topCallstackUnit.equals(selfCallstackUnit)) { DuplicateUserCall dupUserCall = dupUserCallMap.get(tid); if (null == dupUserCall) { @@ -432,4 +454,39 @@ public class SWAPCallStackManager extends BaseCallstackManager { seqTimeByTidMap.clear(); } + public boolean isAddrInBinaryRange(int pid, long time, long addr) { + ProcessInfoPackage processInfoPkg = AnalyzerManager.getProject() + .getProcessInfo(pid); + ProcessInfo processInfo = processInfoPkg.getProcessInfo(time); + if (null == processInfo) { + return false; + } + + if (addr >= processInfo.getLowestAddress() + && addr <= processInfo.getHighestAddress()) { + return true; + } else { + return false; + } + } + + public boolean isPieBuild(int pid, long time) { + ProcessInfoPackage processInfoPkg = AnalyzerManager.getProject() + .getProcessInfo(pid); + ProcessInfo processInfo = processInfoPkg.getProcessInfo(time); + if (null == processInfo) { + return false; + } + + String path = processInfo.getMainTargetBinaryPath(); + String key = AnalyzerUtil.getTargetPathKey(path); + BinaryInfo binInfo = DACommunicator.getSelectedApp().getBinaryInfo(key); + if (null == binInfo) { + return false; + } + if (binInfo.getType() == 1) { + return true; + } + return false; + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java index 2b8f3e2..f6cbc05 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/communicator/Communicator30.java @@ -84,6 +84,7 @@ import org.tizen.dynamicanalyzer.ui.info.snapshot.EmulatorSnapshot; import org.tizen.dynamicanalyzer.ui.info.snapshot.SocketClient; import org.tizen.dynamicanalyzer.ui.kernel.data.KernelDataManager; import org.tizen.dynamicanalyzer.ui.network.NetworkChartManager; +import org.tizen.dynamicanalyzer.ui.page.UpdateViewTimer; import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler; import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager; import org.tizen.dynamicanalyzer.ui.toolbar.ConfigureManager; @@ -92,7 +93,6 @@ import org.tizen.dynamicanalyzer.ui.userinterface.UIDataManager; import org.tizen.dynamicanalyzer.ui.widgets.DADialog; import org.tizen.dynamicanalyzer.uirecorder.UIRecorderTool; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; -import org.tizen.dynamicanalyzer.utils.UpdateViewTimer; import org.tizen.sdblib.exception.SdbCommandRejectedException; import org.tizen.sdblib.exception.TimeoutException; import org.tizen.sdblib.service.SyncResult; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java index feec0f1..bee8b2a 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/logparser/SWAPLogParser.java @@ -26,16 +26,23 @@ package org.tizen.dynamicanalyzer.swap.logparser; import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.AnalyzerManager; import org.tizen.dynamicanalyzer.common.CommonConstants; +import org.tizen.dynamicanalyzer.common.SymbolManager; import org.tizen.dynamicanalyzer.communicator.CommunicatorUtils; import org.tizen.dynamicanalyzer.communicator.DACommunicator; import org.tizen.dynamicanalyzer.logparser.LogInserter; import org.tizen.dynamicanalyzer.model.ImageInfo; +import org.tizen.dynamicanalyzer.nl.InformationViewLabels; +import org.tizen.dynamicanalyzer.swap.channel.control.BinaryInfo; +import org.tizen.dynamicanalyzer.swap.channel.data.ApiNameManager; import org.tizen.dynamicanalyzer.swap.channel.data.DataChannelConstants; +import org.tizen.dynamicanalyzer.swap.channel.data.LibraryObject; import org.tizen.dynamicanalyzer.swap.channel.data.ProcessInfo; import org.tizen.dynamicanalyzer.swap.channel.data.ProcessInfoPackage; import org.tizen.dynamicanalyzer.swap.model.data.ContextSwitchData; @@ -44,6 +51,7 @@ import org.tizen.dynamicanalyzer.swap.model.data.ProfileData; import org.tizen.dynamicanalyzer.swap.model.data.ReplayData; import org.tizen.dynamicanalyzer.swap.model.data.ScreenShotData; import org.tizen.dynamicanalyzer.swap.model.data.SystemData; +import org.tizen.dynamicanalyzer.swap.platform.BinarySettingManager; import org.tizen.dynamicanalyzer.ui.info.snapshot.SocketClient; import org.tizen.dynamicanalyzer.ui.page.BaseView; import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler; @@ -154,10 +162,9 @@ public class SWAPLogParser implements Runnable { String apiName = pData.getApiName(); if (null == apiName || apiName.isEmpty() || apiName.equals("_end")) { //$NON-NLS-1$ - apiName = AnalyzerUtil.getFuncName(pData); + apiName = getFuncName(pData); if (apiName == null || apiName.equals("")) { - // necessary? pData.setApiName(apiName); continue; } else { pData.setApiName(apiName); @@ -196,7 +203,7 @@ public class SWAPLogParser implements Runnable { // + " base addr : " // + AnalyzerUtil.toHexdecimal(processInfo // .getLowestAddress())); - + pushLog(log, logPack); if (pcAddr >= processInfo.getLowestAddress() && pcAddr <= processInfo.getHighestAddress()) { @@ -419,4 +426,130 @@ public class SWAPLogParser implements Runnable { // + " time " + input.getTime()); // System.out.println(" ]"); // } + + private String getFuncName(ProfileData input) { + long pcAddr = input.getPcAddr(); + HashMap funcNameMap = AnalyzerManager + .getFuncNameMapByPid(input.getPid()); + String functionName = funcNameMap.get(pcAddr); + if (null != functionName) { + return functionName; + } + + // String functionName = null; + ProcessInfoPackage processInfoPkg = AnalyzerManager.getProject() + .getProcessInfo(input.getPid()); + ProcessInfo processInfo = processInfoPkg + .getProcessInfo(input.getTime()); + + /** for debug */ + BinaryInfo binInfo1 = processInfo.getTargetBinary(input.getPcAddr()); + if (binInfo1 == null) { + System.out.println("[Get functino name bug : " + + "Can't find binary info]"); + System.out + .println("msg id : " + + AnalyzerUtil.toHexdecimal(input.getId()) + + " pid : " + + processInfo.getPid() + + " low : " + + AnalyzerUtil.toHexdecimal(processInfo + .getLowestAddress()) + + " input addr : " + + AnalyzerUtil.toHexdecimal(input.getPcAddr()) + + " high : " + + AnalyzerUtil.toHexdecimal(processInfo + .getHighestAddress())); + return null; + } + // String binPath1 = binInfo1.getTargetBinaryPath(); + // System.out.print("binary : " + binPath1 + " ==> "); + // AnalyzerUtil.printHexdecimal(processInfo.getLowestAddress()); + // System.out.print(" < "); + // AnalyzerUtil.printHexdecimal(pcAddr); + // System.out.print(" < "); + // AnalyzerUtil.printHexdecimal(processInfo.getHighestAddress()); + // System.out.println(); + + if (pcAddr >= processInfo.getLowestAddress() + && pcAddr <= processInfo.getHighestAddress()) { + String baseAddr = Long.toString(processInfo.getLowestAddress()); + String pcStr = Long.toString(pcAddr); + BinaryInfo binInfo = processInfo.getTargetBinary(pcAddr); + String localPath = binInfo.getTempBinaryPath(); + input.setBuildType(binInfo.getType()); + input.setBinaryPath(binInfo.getTargetBinaryPath()); + boolean isPieBuild = true; + if (binInfo.getType() != 1) { + isPieBuild = false; + } + functionName = SymbolManager.addr2func(localPath, pcStr, + isPieBuild, baseAddr); + } else { + HashMap binInfoMap = BinarySettingManager + .getInstance().getTargetBinInfoMap(); + List binPaths = new ArrayList(); + binPaths.addAll(binInfoMap.keySet()); + + HashMap libHash = processInfo + .getLibObjHash(); + LibraryObject libraryObject = null; + int size = binPaths.size(); + for (int i = 0; i < size; i++) { + String binPath = binPaths.get(i); + LibraryObject libObj = libHash.get(binPath); + if (null == libObj) { + continue; + } + long lowAddr = libObj.getLowestAddress(); + long highAddr = libObj.getHighestAddress(); + + /** for debug */ + // if (lowAddr > pcAddr || highAddr < pcAddr) { + // System.out.print(input.getId() + " lib : " + binPath + // + " ==> "); + // AnalyzerUtil.printHexdecimal(lowAddr); + // System.out.print(" < "); + // AnalyzerUtil.printHexdecimal(pcAddr); + // System.out.print(" < "); + // AnalyzerUtil.printHexdecimal(highAddr); + // System.out.println(); + // } + + if (pcAddr >= lowAddr && pcAddr <= highAddr) { + libraryObject = libObj; + break; + } + } + if (null != libraryObject) { + String path = libraryObject.getLibPath(); + BinaryInfo binInfo = binInfoMap.get(path); + if (null != binInfo) { + String localPath = binInfo.getTempBinaryPath(); + String baseAddr = Long.toString(libraryObject + .getLowestAddress()); + String pcStr = Long.toString(pcAddr); + boolean isPieBuild = true; + if (binInfo.getType() != 1) { + isPieBuild = false; + } + functionName = SymbolManager.addr2func(localPath, pcStr, + isPieBuild, baseAddr); + } + } + } + + if (null == functionName || functionName.isEmpty() + || functionName.equals("_end")) { //$NON-NLS-1$ + functionName = InformationViewLabels.CALLSTACK_TABLE_UNKNOWN_FUNCTION; + ApiNameManager.getApiId(functionName); + } else { + String prevFunctionName = functionName; + functionName = SymbolManager + .demanglingFunctionName(prevFunctionName); + ApiNameManager.getApiId(functionName); + } + funcNameMap.put(pcAddr, functionName); + return functionName; + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/BinarySettingManager.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/BinarySettingManager.java index d72e74a..f740bf8 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/BinarySettingManager.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/BinarySettingManager.java @@ -41,8 +41,6 @@ import org.tizen.dynamicanalyzer.common.AnalyzerPaths; import org.tizen.dynamicanalyzer.common.CommonConstants; import org.tizen.dynamicanalyzer.common.PathManager; import org.tizen.dynamicanalyzer.swap.channel.control.BinaryInfo; -import org.tizen.dynamicanalyzer.swap.platform.ui.BinarySettingProcessor; -import org.tizen.dynamicanalyzer.swap.platform.ui.BinarySettingProgressManager; import org.tizen.dynamicanalyzer.swap.platform.ui.InputRow; import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; @@ -436,4 +434,114 @@ public class BinarySettingManager { AnalyzerUtil.tryClose(br); } } + + public String getDebugInfoPath(String libPath, String rootPath) { + boolean isDebugInfo = true; + String debugPath = null; + + String[] splitTargetLib = libPath.split(CommonConstants.SLASH); + String libFullName = splitTargetLib[splitTargetLib.length - 1]; + if (rootPath.endsWith(CommonConstants.SLASH)) { + rootPath = rootPath.substring(0, rootPath.length() - 1); + } + int index = libFullName.indexOf(".so"); + if (index < 0) { + return null; + } + // 3 means remove "lib" string + String debugInfoToken = "*" + libFullName.substring(3, index) + + "-debuginfo*.rpm"; + // String rootstrapPath = PathManager.getRootStrapsPath(); + List lines = new ArrayList(); + String toolPath = AnalyzerPaths.TOOL_FOLDER_PATH + File.separator + + "debuginfo.sh"; + String[] command = new String[] { toolPath, "-f", rootPath, + debugInfoToken }; + try { + Runtime rt = Runtime.getRuntime(); + Process process = rt.exec(command); + process.waitFor(); + BufferedReader reader = new BufferedReader(new InputStreamReader( + process.getInputStream())); + int lineCount = 0; + String line = null; + while (null != (line = reader.readLine())) { + lineCount++; + System.out.println("LINE (" + lineCount + ") : " + line); + lines.add(line); + } + if (lineCount == 0) { + BufferedReader error = new BufferedReader( + new InputStreamReader(process.getErrorStream())); + String errorStr = error.readLine(); + System.out.println("find debug info path fail.. " + errorStr); + isDebugInfo = false; + } + } catch (IOException e) { + e.printStackTrace(); + return null; + } catch (InterruptedException e) { + e.printStackTrace(); + return null; + } + + if (!isDebugInfo) { + + String libVersion = null; + if (libFullName.length() > index + 4) { + libVersion = libFullName.substring(index + 4, + libFullName.length()); + } else { + libVersion = CommonConstants.EMPTY; + } + debugInfoToken = "*" + libFullName.substring(3, index) + "-debug-" + + libVersion + "*.rpm"; + + command = new String[] { toolPath, "-f", rootPath, debugInfoToken }; + try { + Runtime rt = Runtime.getRuntime(); + Process process = rt.exec(command); + process.waitFor(); + BufferedReader reader = new BufferedReader( + new InputStreamReader(process.getInputStream())); + int lineCount = 0; + String line = null; + while (null != (line = reader.readLine())) { + lineCount++; + System.out.println("LINE (" + lineCount + ") : " + line); + lines.add(line); + } + if (lineCount == 0) { + BufferedReader error = new BufferedReader( + new InputStreamReader(process.getErrorStream())); + String errorStr = error.readLine(); + System.out.println("find debug info path fail.. " + + errorStr); + return null; + } + } catch (IOException e) { + e.printStackTrace(); + return null; + } catch (InterruptedException e) { + e.printStackTrace(); + return null; + } + } + + String select = null; + for (String line : lines) { + if (null == select) { + select = line; + } else if (select.length() > line.length()) { + select = line; + } + } + + if (null == select) { + return null; + } else { + debugPath = rootPath + select.substring(1, select.length()); + } + return debugPath; + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinarySettingProcessor.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinarySettingProcessor.java index bdc30af..fb90924 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinarySettingProcessor.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/BinarySettingProcessor.java @@ -9,7 +9,6 @@ import org.tizen.dynamicanalyzer.communicator.DACommunicator; import org.tizen.dynamicanalyzer.swap.platform.BinarySettingData; import org.tizen.dynamicanalyzer.swap.platform.BinarySettingManager; import org.tizen.dynamicanalyzer.ui.toolbar.configuration.BinarySettingsPage; -import org.tizen.dynamicanalyzer.utils.AnalyzerUtil; import org.tizen.sdblib.service.FileEntry; public class BinarySettingProcessor implements Runnable { @@ -75,8 +74,9 @@ public class BinarySettingProcessor implements Runnable { BinarySettingData binaryData = new BinarySettingData(); binaryData.setBinaryPath(entry.getFullPath()); - binaryData.setDebugRpmPath(AnalyzerUtil.getDebugInfoPath( - entry.getFullPath(), page.getDebugRootPath())); + binaryData.setDebugRpmPath(BinarySettingManager.getInstance() + .getDebugInfoPath(entry.getFullPath(), + page.getDebugRootPath())); addBinData.add(binaryData); if (addBinData.size() < 40) { BinarySettingProgressManager.getInstance().setValue( @@ -137,8 +137,9 @@ public class BinarySettingProcessor implements Runnable { } if (null == binData.getDebugRpmPath() || binData.getDebugRpmPath().isEmpty()) { - String debugPath = AnalyzerUtil.getDebugInfoPath( - binData.getBinaryPath(), page.getDebugRootPath()); + String debugPath = BinarySettingManager.getInstance() + .getDebugInfoPath(binData.getBinaryPath(), + page.getDebugRootPath()); binData.setDebugRpmPath(debugPath); } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorer.java index 27d566a..72b8d05 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/swap/platform/ui/DeviceExplorer/DeviceExplorer.java @@ -165,6 +165,10 @@ public class DeviceExplorer extends Composite { inputText.getControl().setSelection( inputText.getText().length()); } + else + { + + } } @Override diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/UpdateViewTimer.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/UpdateViewTimer.java similarity index 97% rename from org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/UpdateViewTimer.java rename to org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/UpdateViewTimer.java index b24c842..59be321 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/UpdateViewTimer.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/page/UpdateViewTimer.java @@ -24,7 +24,7 @@ * */ -package org.tizen.dynamicanalyzer.utils; +package org.tizen.dynamicanalyzer.ui.page; import java.util.Timer; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/StopLogProcessor.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/StopLogProcessor.java index d4b4f59..d6ef7d5 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/StopLogProcessor.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/StopLogProcessor.java @@ -37,11 +37,11 @@ import org.tizen.dynamicanalyzer.sql.SqlManager; import org.tizen.dynamicanalyzer.swap.logparser.SWAPLogParser; import org.tizen.dynamicanalyzer.ui.file.FileChartManager; import org.tizen.dynamicanalyzer.ui.network.NetworkChartManager; +import org.tizen.dynamicanalyzer.ui.page.UpdateViewTimer; import org.tizen.dynamicanalyzer.ui.summary.profiling.FunctionUsageProfiler; import org.tizen.dynamicanalyzer.ui.thread.ThreadChartManager; import org.tizen.dynamicanalyzer.ui.userinterface.UIDataManager; import org.tizen.dynamicanalyzer.uirecorder.UIRecorderTool; -import org.tizen.dynamicanalyzer.utils.UpdateViewTimer; public class StopLogProcessor implements Runnable { private static Thread stopLogProcessThread = null; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/ToolbarArea.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/ToolbarArea.java index 0a558e1..7c34ef1 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/ToolbarArea.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/ui/toolbar/ToolbarArea.java @@ -180,18 +180,6 @@ public class ToolbarArea { return processCombo; } - public int setCursor(int oldStyle, int newStyle) { - if (oldStyle == newStyle) { - return newStyle; - } - if (null != cursor) { - cursor.dispose(); - } - cursor = new Cursor(null, newStyle); - shell.setCursor(cursor); - return newStyle; - } - private ToolbarArea(IWorkbenchWindowConfigurer configurer, Shell sh) { shell = sh; diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java index 613dddb..1351510 100755 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/utils/AnalyzerUtil.java @@ -26,7 +26,6 @@ package org.tizen.dynamicanalyzer.utils; -import java.io.BufferedReader; import java.io.Closeable; import java.io.File; import java.io.FileInputStream; @@ -34,7 +33,6 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; @@ -64,29 +62,17 @@ import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.part.ViewPart; import org.tizen.dynamicanalyzer.common.AnalyzerConstants; import org.tizen.dynamicanalyzer.common.AnalyzerManager; -import org.tizen.dynamicanalyzer.common.AnalyzerPaths; import org.tizen.dynamicanalyzer.common.CommonConstants; -import org.tizen.dynamicanalyzer.common.SymbolManager; -import org.tizen.dynamicanalyzer.communicator.CommunicatorUtils; import org.tizen.dynamicanalyzer.communicator.DACommunicator; import org.tizen.dynamicanalyzer.handlers.RealtimePerspectiveHandler; -import org.tizen.dynamicanalyzer.nl.InformationViewLabels; import org.tizen.dynamicanalyzer.swap.channel.control.BinaryInfo; -import org.tizen.dynamicanalyzer.swap.channel.data.ApiNameManager; -import org.tizen.dynamicanalyzer.swap.channel.data.LibraryObject; import org.tizen.dynamicanalyzer.swap.channel.data.ProcessInfo; import org.tizen.dynamicanalyzer.swap.channel.data.ProcessInfoPackage; -import org.tizen.dynamicanalyzer.swap.model.data.ProfileData; -import org.tizen.dynamicanalyzer.swap.platform.BinarySettingManager; import org.tizen.dynamicanalyzer.ui.page.BaseView; import org.tizen.dynamicanalyzer.ui.page.DAPageComposite; import org.tizen.dynamicanalyzer.ui.page.ViewAction; import org.tizen.dynamicanalyzer.ui.timeline.common.TimelineView; import org.tizen.dynamicanalyzer.ui.widgets.DATabComposite; -import org.tizen.sdblib.IDevice; -import org.tizen.sdblib.exception.SdbCommandRejectedException; -import org.tizen.sdblib.exception.TimeoutException; -import org.tizen.sdblib.service.SyncResult; public class AnalyzerUtil { private static IWorkbenchWindow window = null; @@ -462,61 +448,6 @@ public class AnalyzerUtil { return num; } - public static List getApiMap(IDevice device) { - String apiFilePath = AnalyzerPaths.TEMP_FOLDER_PATH + File.separator - + device.getSerialNumber() + CommonConstants.UNDERBAR - + AnalyzerConstants.API_NAME_FILE_NAME; - try { - device.setRootUser(true); - } catch (TimeoutException e) { - e.printStackTrace(); - } catch (SdbCommandRejectedException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - - SyncResult res = CommunicatorUtils.pull(device, - AnalyzerPaths.DA_API_MAP_PATH, apiFilePath); - if (null != res && res.isOk()) { - System.out.println("api map copying success!!");//$NON-NLS-1$ - } else { - System.out.println("Failed to get " + apiFilePath); //$NON-NLS-1$ - return null; - } - - List apiMap = new ArrayList(); - apiMap.add("unknown"); - - File file = new File(apiFilePath); - if (!file.exists()) { - System.out.println("file open failed..."); - return null; - } - try { - FileInputStream fis = new FileInputStream(file); - InputStreamReader isr = new InputStreamReader(fis); - BufferedReader reader = new BufferedReader(isr); - - String input = null; - while (null != (input = reader.readLine())) { - String[] splitLine = input.trim().split(CommonConstants.SPACE, - 2); - apiMap.add(new String(splitLine[1])); - } - - } catch (FileNotFoundException e) { - e.printStackTrace(); - return null; - } catch (IOException e) { - e.printStackTrace(); - return null; - } catch (ArrayIndexOutOfBoundsException e) { - e.printStackTrace(); - } - return apiMap; - } - public static void printHexdecimal(long value) { String output = String.format("%x", value); System.out.print(output); @@ -573,6 +504,7 @@ public class AnalyzerUtil { return binInfo; } + // for tizen 2.2 public static boolean isPieBuild(int pid, long time) { ProcessInfoPackage processInfoPkg = AnalyzerManager.getProject() .getProcessInfo(pid); @@ -593,22 +525,6 @@ public class AnalyzerUtil { return false; } - public static boolean isAddrInBinaryRange(int pid, long time, long addr) { - ProcessInfoPackage processInfoPkg = AnalyzerManager.getProject() - .getProcessInfo(pid); - ProcessInfo processInfo = processInfoPkg.getProcessInfo(time); - if (null == processInfo) { - return false; - } - - if (addr >= processInfo.getLowestAddress() - && addr <= processInfo.getHighestAddress()) { - return true; - } else { - return false; - } - } - public static boolean getBinaryBuildType(String localBinaryPath) { HashMap binMap = DACommunicator.getSelectedApp() .getBinaryInfoMap(); @@ -624,232 +540,6 @@ public class AnalyzerUtil { return false; } - public static String getFuncName(ProfileData input) { - long pcAddr = input.getPcAddr(); - HashMap funcNameMap = AnalyzerManager - .getFuncNameMapByPid(input.getPid()); - String functionName = funcNameMap.get(pcAddr); - if (null != functionName) { - return functionName; - } - - // String functionName = null; - ProcessInfoPackage processInfoPkg = AnalyzerManager.getProject() - .getProcessInfo(input.getPid()); - ProcessInfo processInfo = processInfoPkg - .getProcessInfo(input.getTime()); - - /** for debug */ - BinaryInfo binInfo1 = processInfo.getTargetBinary(input.getPcAddr()); - if (binInfo1 == null) { -// System.out.println("msg id : " + toHexdecimal(input.getId()) -// + " pid : " + processInfo.getPid() + " low : " -// + toHexdecimal(processInfo.getLowestAddress()) -// + " input addr : " + toHexdecimal(input.getPcAddr()) -// + " high : " -// + toHexdecimal(processInfo.getHighestAddress())); - return null; - } - // String binPath1 = binInfo1.getTargetBinaryPath(); - // System.out.print("binary : " + binPath1 + " ==> "); - // AnalyzerUtil.printHexdecimal(processInfo.getLowestAddress()); - // System.out.print(" < "); - // AnalyzerUtil.printHexdecimal(pcAddr); - // System.out.print(" < "); - // AnalyzerUtil.printHexdecimal(processInfo.getHighestAddress()); - // System.out.println(); - - if (pcAddr >= processInfo.getLowestAddress() - && pcAddr <= processInfo.getHighestAddress()) { - String baseAddr = Long.toString(processInfo.getLowestAddress()); - String pcStr = Long.toString(pcAddr); - BinaryInfo binInfo = processInfo.getTargetBinary(pcAddr); - String localPath = binInfo.getTempBinaryPath(); - input.setBuildType(binInfo.getType()); - input.setBinaryPath(binInfo.getTargetBinaryPath()); - boolean isPieBuild = true; - if (binInfo.getType() != 1) { - isPieBuild = false; - } - functionName = SymbolManager.addr2func(localPath, pcStr, - isPieBuild, baseAddr); - } else { - HashMap binInfoMap = BinarySettingManager - .getInstance().getTargetBinInfoMap(); - List binPaths = new ArrayList(); - binPaths.addAll(binInfoMap.keySet()); - - HashMap libHash = processInfo - .getLibObjHash(); - LibraryObject libraryObject = null; - int size = binPaths.size(); - for (int i = 0; i < size; i++) { - String binPath = binPaths.get(i); - LibraryObject libObj = libHash.get(binPath); - if (null == libObj) { - continue; - } - long lowAddr = libObj.getLowestAddress(); - long highAddr = libObj.getHighestAddress(); - - /** for debug */ - // if (lowAddr > pcAddr || highAddr < pcAddr) { - // System.out.print(input.getId() + " lib : " + binPath - // + " ==> "); - // AnalyzerUtil.printHexdecimal(lowAddr); - // System.out.print(" < "); - // AnalyzerUtil.printHexdecimal(pcAddr); - // System.out.print(" < "); - // AnalyzerUtil.printHexdecimal(highAddr); - // System.out.println(); - // } - - if (pcAddr >= lowAddr && pcAddr <= highAddr) { - libraryObject = libObj; - break; - } - } - if (null != libraryObject) { - String path = libraryObject.getLibPath(); - BinaryInfo binInfo = binInfoMap.get(path); - if (null != binInfo) { - String localPath = binInfo.getTempBinaryPath(); - String baseAddr = Long.toString(libraryObject - .getLowestAddress()); - String pcStr = Long.toString(pcAddr); - boolean isPieBuild = true; - if (binInfo.getType() != 1) { - isPieBuild = false; - } - functionName = SymbolManager.addr2func(localPath, pcStr, - isPieBuild, baseAddr); - } - } - } - - if (null == functionName || functionName.isEmpty() - || functionName.equals("_end")) { //$NON-NLS-1$ - functionName = InformationViewLabels.CALLSTACK_TABLE_UNKNOWN_FUNCTION; - ApiNameManager.getApiId(functionName); - } else { - String prevFunctionName = functionName; - functionName = SymbolManager - .demanglingFunctionName(prevFunctionName); - ApiNameManager.getApiId(functionName); - } - funcNameMap.put(pcAddr, functionName); - return functionName; - } - - public static String getDebugInfoPath(String libPath, String rootPath) { - boolean isDebugInfo = true; - String debugPath = null; - - String[] splitTargetLib = libPath.split(CommonConstants.SLASH); - String libFullName = splitTargetLib[splitTargetLib.length - 1]; - if (rootPath.endsWith(CommonConstants.SLASH)) { - rootPath = rootPath.substring(0, rootPath.length() - 1); - } - int index = libFullName.indexOf(".so"); - if (index < 0) { - return null; - } - // 3 means remove "lib" string - String debugInfoToken = "*" + libFullName.substring(3, index) - + "-debuginfo*.rpm"; - // String rootstrapPath = PathManager.getRootStrapsPath(); - List lines = new ArrayList(); - String toolPath = AnalyzerPaths.TOOL_FOLDER_PATH + File.separator - + "debuginfo.sh"; - String[] command = new String[] { toolPath, "-f", rootPath, - debugInfoToken }; - try { - Runtime rt = Runtime.getRuntime(); - Process process = rt.exec(command); - process.waitFor(); - BufferedReader reader = new BufferedReader(new InputStreamReader( - process.getInputStream())); - int lineCount = 0; - String line = null; - while (null != (line = reader.readLine())) { - lineCount++; - System.out.println("LINE (" + lineCount + ") : " + line); - lines.add(line); - } - if (lineCount == 0) { - BufferedReader error = new BufferedReader( - new InputStreamReader(process.getErrorStream())); - String errorStr = error.readLine(); - System.out.println("find debug info path fail.. " + errorStr); - isDebugInfo = false; - } - } catch (IOException e) { - e.printStackTrace(); - return null; - } catch (InterruptedException e) { - e.printStackTrace(); - return null; - } - - if (!isDebugInfo) { - - String libVersion = null; - if (libFullName.length() > index + 4) { - libVersion = libFullName.substring(index + 4, - libFullName.length()); - } else { - libVersion = CommonConstants.EMPTY; - } - debugInfoToken = "*" + libFullName.substring(3, index) + "-debug-" - + libVersion + "*.rpm"; - - command = new String[] { toolPath, "-f", rootPath, debugInfoToken }; - try { - Runtime rt = Runtime.getRuntime(); - Process process = rt.exec(command); - process.waitFor(); - BufferedReader reader = new BufferedReader( - new InputStreamReader(process.getInputStream())); - int lineCount = 0; - String line = null; - while (null != (line = reader.readLine())) { - lineCount++; - System.out.println("LINE (" + lineCount + ") : " + line); - lines.add(line); - } - if (lineCount == 0) { - BufferedReader error = new BufferedReader( - new InputStreamReader(process.getErrorStream())); - String errorStr = error.readLine(); - System.out.println("find debug info path fail.. " - + errorStr); - return null; - } - } catch (IOException e) { - e.printStackTrace(); - return null; - } catch (InterruptedException e) { - e.printStackTrace(); - return null; - } - } - - String select = null; - for (String line : lines) { - if (null == select) { - select = line; - } else if (select.length() > line.length()) { - select = line; - } - } - - if (null == select) { - return null; - } else { - debugPath = rootPath + select.substring(1, select.length()); - } - return debugPath; - } public static String getTargetPathKey(String targetPath) { String returnStr = null; -- 2.7.4