获取调用栈栈帧指令偏移的方法、装置、介质和设备制造方法及图纸

技术编号:23190688 阅读:36 留言:0更新日期:2020-01-24 16:11
本公开提供了一种获取调用栈栈帧指令偏移的方法、装置、介质和设备,所述方法包括:初始化SDK,构建协助进程,所述协助进程内只有一个线程;获取程序运行过程中的调用栈存储对象;将所述调用栈存储对象强转化为对象数组;获取所述对象数组的第一个元素,并将所述第一个元素强转化为整型数组或长整型数组;截取所述整型数组或长整型数组的后半段数据,获得所述调用栈栈帧指令偏移。本方法能够准确获得调用栈栈帧的指令偏移值,使得安卓应用安装包的体积可以有效地精简,进而提高应用的下载成功率,为产品带来更多用户,提高产品的推广效率。

Methods, devices, media and devices for acquiring instruction offset of call stack frame

【技术实现步骤摘要】
获取调用栈栈帧指令偏移的方法、装置、介质和设备
本公开涉及计算机
,具体而言,涉及一种获取调用栈栈帧指令偏移的方法、装置、介质和设备。
技术介绍
安卓应用的包体积是衡量应用质量的重要指标之一:包体积越小,用户的下载成功率越高,进而应用的使用用户也会越多。安卓应用的安装包(apk文件)中的dex保存的是应用的代码,占有可观的体积。如果能够将此部分的体积减小,那么无疑会有效地减小安装包的体积,dex中的debugItem存储有应用代码的行号信息,删除后不会影响代码的运行效果,但是会导致无法获取应用对应的源码行号信息,当应用出现问题后就难以定位。因此,如何在删除调用栈源码行号后,准确的获取到调用栈的指令偏移值,进而找到源码行号,是一个需要解决的技术问题。公开内容本公开的目的在于提供一种获取调用栈栈帧指令偏移的方法、装置、介质和设备,能够解决上述提到的至少一个技术问题。具体方案如下:根据本公开的具体实施方式,第一方面,本公开提供一种获取调用栈栈帧指令偏移的方法,包括:初始化SDK,构建协助进程,所述协助进程本文档来自技高网...

【技术保护点】
1.一种获取调用栈栈帧指令偏移的方法,其特征在于,包括:/n初始化SDK,构建协助进程,所述协助进程内只有一个线程;/n获取程序运行过程中的调用栈存储对象;/n将所述调用栈存储对象强转化为对象数组;/n获取所述对象数组的第一个元素,并将所述第一个元素强转化为整型数组或长整型数组;/n截取所述整型数组或长整型数组的后半段数据,获得所述调用栈栈帧指令偏移。/n

【技术特征摘要】
1.一种获取调用栈栈帧指令偏移的方法,其特征在于,包括:
初始化SDK,构建协助进程,所述协助进程内只有一个线程;
获取程序运行过程中的调用栈存储对象;
将所述调用栈存储对象强转化为对象数组;
获取所述对象数组的第一个元素,并将所述第一个元素强转化为整型数组或长整型数组;
截取所述整型数组或长整型数组的后半段数据,获得所述调用栈栈帧指令偏移。


2.如权利要求1所述的方法,其特征在于,所述初始化SDK,还包括:
获取存储本地服务的指针参数;
获取指定文件目录下的构建函数,所述构建函数用于构建java线程调用栈底层表示对象。


3.如权利要求2所述的方法,其特征在于,所述获取程序运行过程中的调用栈存储对象,包括:
获取目标线程的ID;
根据所述目标线程的ID,暂停所述目标线程;
从所述暂停的目标线程中获取所述调用栈存储对象;
恢复所述目标线程的执行。


4.如权利要求3所述的方法,其特征在于,所述获取目标线程的ID,包括:
调用名称提取函数;
通过所述名称提取函数获取所述目标线程的名称;
遍历指定文件目录下的所有子目录,通过所述目标线程的名称查找所述目标线程的ID。


5.如权利要求4所述的方法,其特征在于,所述根据所述目标线程的ID,暂停所述目标线程,包括:
通过所述协助线程调用linux操作系统的第一系统调用,其中,所述第一系统调用包括第一参数和第二参数,所述第一参数采用第一字符串表达,所述第二参数采用所述目标线程的ID;
通过所述协助线程调用linux操作系统的第二系统调用,其中,...

【专利技术属性】
技术研发人员:刘洪凯
申请(专利权)人:北京字节跳动网络技术有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1