段错误 核心已转储_如何从Android App捕获堆转储? – 3个选项

段错误 核心已转储

段错误 核心已转储

堆转储是诊断与内存相关的问题(例如内存泄漏,垃圾回收问题和java.lang.OutOfMemoryError)的重要工件。 它们也是优化内存使用情况的重要工件。

在本文中,我们提供了几种不同的选项来从Android Apps捕获堆转储。 捕获堆转储后,可以使用HeapHeroAndroid studio的堆分析器等出色的工具来分析堆转储。

内存分析器

以下是从Android Studio中的Memory Profiler捕获堆转储的步骤:

一种。 运行该应用,然后从Android Studio中选择要配置的设备。

b。 在您的Android Studio中,单击查看>>工具窗口>> Android Profiler

C。 将有“内存”时间轴,该时间轴将在“ CPU”时间轴下方,但在“网络”时间轴上方。 在此内存时间轴中,单击下载按钮(下图突出显示)以从Android应用程序生成堆转储。

d。 要将堆转储存储在系统中,请单击下图中突出显示的图标。

e。 选择一个位置来保存生成的堆转储文件。

Android调试桥(ADB)

Android Debug Bridge是一个命令行工具,可让您与设备进行交互。 亚行提供了各种设备操作,例如安装和调试应用程序。 它还可以访问Unix Shell,以在设备上运行各种命令。 您可以使用此工具生成android堆转储。 启动ADB Shell,并执行以下步骤:

一种。 识别您的Android应用的流程ID

第一步是确定您的Android应用的流程ID。 您可以通过发出以下命令来做到这一点:

adb shell ps | grep <APP-NAME>

上面的命令将返回有关该过程的详细信息。 第二个数字将是您应用的PID。 请检查以下屏幕截图。              

b。 创建一个堆转储:

 adb shell am dumpheap <PID> <HEAP-DUMP-FILE-PATH>
 PID: Your Android App Process Id
 HEAP-DUMP-FILE-PATH: Location where heap dump file should be generated

例:

adb shell am dumpheap 1769 /data/local/tmp/android.hprof

C。 将文件拉到计算机上

上面的步骤将在设备中生成堆转储文件。 为了进行分析,您需要将生成的文件拉到计算机上。 您可以通过发出以下命令来做到这一点:

 adb pull <HEAP-DUMP-FILE-PATH>
 HEAP-DUMP-FILE-PATH: Location where heap dump file

例:

adb pull /data/local/tmp/android.hprof

在OutOfMemoryError上捕获堆转储

如果将以下代码放置在应用程序中,则当您的应用程序收到OutOfMemoryError时,它将捕获堆转储。

 public class CaptureHeapDumps extends Application {

       private static final String FILE_NAME = "heap-dump.hprof" ;

       @Override

       public void onCreate() {

          super .onCreate();
 Thread.currentThread().setUncaughtExceptionHandler(OutOfMemoryException());

       }

       @NonNull

       private Thread.UncaughtExceptionHandler OutOfMemoryException() {

               return new Thread.UncaughtExceptionHandler() {

               @Override

               public void uncaughtException(Thread t, Throwable e) {

                  String directory = getApplicationInfo().dataDir;

                  String absolutePath = new File(directory, FILE_NAME)

                         .getAbsolutePath();

                  try {

                      Debug.dumpHprofData(absolutePath);

                  } catch (IOException e) {

                      e.printStackTrace();

                  }

               }

        };

    }
 }

这将在以下位置生成堆转储文件:/data/user/0/appname/heap-dump.hprof

翻译自: https://www.javacodegeeks.com/2019/09/hcapture-heap-dumps-from-android-app-3-options.html

段错误 核心已转储

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值