一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

程序数据处理方法、装置、电子设备、存储介质与流程

2022-08-23 18:52:09 来源:中国专利 TAG:


1.本公开涉及计算机技术领域,尤其涉及一种程序数据处理方法、装置、电子设备、存储介质和计算机程序产品。


背景技术:

2.systrace是一款用于记录短期内设备活动的工具,该工具所生成的systrace信息中汇总了与设备有关的数据信息,如cpu调度程序、磁盘活动和应用线程等信息,开发者可以通过抓取设备的systrace信息来分析设备的性能。
3.传统方法是通过手动对比systrace信息的方式来分析设备的性能,但由于systrace信息中涉及的方法量巨大,造成了巨大的分析工作量,人工分析耗时费力。
4.因此,相关技术中存在分析程序运行数据效率低的问题。


技术实现要素:

5.本公开提供一种程序数据处理方法、装置、电子设备、存储介质和计算机程序产品,以至少解决相关技术中存在分析程序运行数据效率低的问题。本公开的技术方案如下:
6.根据本公开实施例的第一方面,提供一种程序数据处理方法,包括:
7.获取设备活动数据对;所述设备活动数据对包括以第一树结构存储的基准数据和以第二树结构存储的目标数据,所述第一树结构用于表征目标设备调用基准应用程序中的各方法的堆栈关系和耗时情况,所述第二树结构用于表征所述目标设备调用目标应用程序中的各方法的堆栈关系和耗时情况,所述基准应用程序和所述目标应用程序为不同版本的同一应用程序;
8.按照所述目标应用程序的不同程序运行阶段,分别在所述第一树结构和所述第二树结构中进行区域划分,得到与各所述程序运行阶段对应的第一树结构区域和第二树结构区域;
9.针对任一所述程序运行阶段,确定所述第一树结构区域和所述第二树结构区域之间的相同节点;所述相同节点用于确定在所述任一程序运行阶段中被所述目标设备调用的存在耗时异常的方法;
10.将各所述程序运行阶段对应的相同节点,作为所述设备活动数据对对应的相同节点集合;所述相同节点集合用于确定针对所述目标应用程序的耗时异常分析结果。
11.在一种可能实现方式中,所述获取设备活动数据对,包括:
12.获取目标设备对应的基准数据和目标数据;所述基准数据为所述目标设备运行所述基准应用程序时所产生的设备活动数据,所述目标数据为所述目标设备运行所述目标应用程序时所产生的设备活动数据;
13.按照所述目标设备调用所述基准应用程序中的各方法的执行堆栈,采用所述基准数据构造所述第一树结构;
14.按照所述目标设备调用所述目标应用程序中的各方法的执行堆栈,采用所述目标
数据构造所述第二树结构;
15.其中,所述第一树结构和所述第二树结构中的各节点具有对应的节点信息,所述节点信息包括用于表征节点位置和堆栈关系的标识信息,以及用于表征所调用方法的运行状态和耗时情况的方法信息。
16.在一种可能实现方式中,所述针对任一所述程序运行阶段,确定所述第一树结构区域和所述第二树结构区域之间的相同节点,包括:
17.获取预设的第一比对条件;所述第一比对条件用于判定节点之间的节点属性标识是否相匹配,所述节点属性标识包括所属节点标识、所属父节点标识、节点层级深度;
18.针对任一所述程序运行阶段,将所述程序运行阶段对应的第一树结构区域中的任一节点作为待查找节点,按照所述第一比对条件,从所述程序运行阶段对应的第二树结构区域中确定针对所述待查找节点的候选节点;
19.从所述候选节点中确定所述待查找节点对应的匹配节点,将所述第一树结构区域中各节点对应的匹配节点,作为所述程序运行阶段中所述第一树结构区域和所述第二树结构区域之间的相同节点。
20.在一种可能实现方式中,所述从所述候选节点中确定所述待查找节点对应的匹配节点,包括:
21.获取预设的第二比对条件;所述第二比对条件用于判定所述候选节点与所述待查找节点的节点关联标识是否相匹配,所述节点关联标识用于指示所属节点具有的子节点;
22.若检测到任一所述候选节点与所述待查找节点满足所述第二比对条件,将任一所述候选节点作为所述匹配节点。
23.在一种可能实现方式中,在所述按照所述目标应用程序的不同程序运行阶段,分别在所述第一树结构和所述第二树结构中进行区域划分,得到与各所述程序运行阶段对应的第一树结构区域和第二树结构区域的步骤之后,还包括:
24.针对任一所述程序运行阶段,遍历所述程序运行阶段对应的第二树结构区域中的任一节点;
25.若检测到所述程序运行阶段对应的第一树结构区域中未存在与所述任一节点相同的节点,则将所述任一节点作为所述程序运行阶段对应的新增方法节点,以得到所述设备活动数据对对应的新增方法集合。
26.在一种可能实现方式中,在所述将各所述程序运行阶段对应的相同节点,作为所述设备活动数据对对应的相同节点集合的步骤之后,还包括:
27.从所述设备活动数据对对应的相同节点集合中确定方法异常节点;所述方法异常节点包括耗时异常节点和调用异常节点;
28.根据所述耗时异常节点、所述调用异常节点,以及所述新增方法集合,得到所述设备活动数据对对应的目标节点集合;
29.获取多组所述设备活动数据对对应的目标节点集合之间的交集,得到针对所述目标应用程序的耗时异常分析结果。
30.在一种可能实现方式中,所述根据所述耗时异常节点、所述调用异常节点,以及所述新增方法集合,得到所述设备活动数据对对应的目标节点集合,包括:
31.对所述耗时异常节点、所述调用异常节点,以及所述新增方法集合中的冗余节点
进行过滤,将过滤后节点作为所述设备活动数据对对应的目标节点集合。
32.根据本公开实施例的第二方面,提供一种程序数据处理装置,包括:
33.设备活动数据对获取单元,被配置为执行获取设备活动数据对;所述设备活动数据对包括以第一树结构存储的基准数据和以第二树结构存储的目标数据,所述第一树结构用于表征目标设备调用基准应用程序中的各方法的堆栈关系和耗时情况,所述第二树结构用于表征所述目标设备调用目标应用程序中的各方法的堆栈关系和耗时情况,所述基准应用程序和所述目标应用程序为不同版本的同一应用程序;
34.树结构区域划分单元,被配置为执行按照所述目标应用程序的不同程序运行阶段,分别在所述第一树结构和所述第二树结构中进行区域划分,得到与各所述程序运行阶段对应的第一树结构区域和第二树结构区域;
35.相同节点确定单元,被配置为执行针对任一所述程序运行阶段,确定所述第一树结构区域和所述第二树结构区域之间的相同节点;所述相同节点用于确定在所述任一程序运行阶段中被所述目标设备调用的存在耗时异常的方法;
36.相同节点集合得到单元,被配置为执行将各所述程序运行阶段对应的相同节点,作为所述设备活动数据对对应的相同节点集合;所述相同节点集合用于确定针对所述目标应用程序的耗时异常分析结果。
37.在一种可能实现方式中,所述设备活动数据对获取单元,具体被配置为执行获取目标设备对应的基准数据和目标数据;所述基准数据为所述目标设备运行所述基准应用程序时所产生的设备活动数据,所述目标数据为所述目标设备运行所述目标应用程序时所产生的设备活动数据;按照所述目标设备调用所述基准应用程序中的各方法的执行堆栈,采用所述基准数据构造所述第一树结构;按照所述目标设备调用所述目标应用程序中的各方法的执行堆栈,采用所述目标数据构造所述第二树结构;其中,所述第一树结构和所述第二树结构中的各节点具有对应的节点信息,所述节点信息包括用于表征节点位置和堆栈关系的标识信息,以及用于表征所调用方法的运行状态和耗时情况的方法信息。
38.在一种可能实现方式中,所述相同节点确定单元,具体被配置为执行获取预设的第一比对条件;所述第一比对条件用于判定节点之间的节点属性标识是否相匹配,所述节点属性标识包括所属节点标识、所属父节点标识、节点层级深度;针对任一所述程序运行阶段,将所述程序运行阶段对应的第一树结构区域中的任一节点作为待查找节点,按照所述第一比对条件,从所述程序运行阶段对应的第二树结构区域中确定针对所述待查找节点的候选节点;从所述候选节点中确定所述待查找节点对应的匹配节点,将所述第一树结构区域中各节点对应的匹配节点,作为所述程序运行阶段中所述第一树结构区域和所述第二树结构区域之间的相同节点。
39.在一种可能实现方式中,所述相同节点确定单元,具体被配置为执行获取预设的第二比对条件;所述第二比对条件用于判定所述候选节点与所述待查找节点的节点关联标识是否相匹配,所述节点关联标识用于指示所属节点具有的子节点;若检测到任一所述候选节点与所述待查找节点满足所述第二比对条件,将任一所述候选节点作为所述匹配节点。
40.在一种可能实现方式中,所述程序数据处理装置,还包括:
41.节点遍历单元,具体被配置为执行针对任一所述程序运行阶段,遍历所述程序运
行阶段对应的第二树结构区域中的任一节点;
42.新增方法节点确定单元,具体被配置为执行若检测到所述程序运行阶段对应的第一树结构区域中未存在与所述任一节点相同的节点,则将所述任一节点作为所述程序运行阶段对应的新增方法节点,以得到所述设备活动数据对对应的新增方法集合。
43.在一种可能实现方式中,所述程序数据处理装置,还包括:
44.方法异常节点确定单元,具体被配置为执行从所述设备活动数据对对应的相同节点集合中确定方法异常节点;所述方法异常节点包括耗时异常节点和调用异常节点;
45.目标节点集合得到单元,具体被配置为执行根据所述耗时异常节点、所述调用异常节点,以及所述新增方法集合,得到所述设备活动数据对对应的目标节点集合;
46.交集操作单元,具体被配置为执行获取多组所述设备活动数据对对应的目标节点集合之间的交集,得到针对所述目标应用程序的耗时异常分析结果。
47.在一种可能实现方式中,所述目标节点集合得到单元,具体被配置为执行对所述耗时异常节点、所述调用异常节点,以及所述新增方法集合中的冗余节点进行过滤,将过滤后节点作为所述设备活动数据对对应的目标节点集合。
48.根据本公开实施例的第三方面,提供一种电子设备,包括:
49.处理器;
50.用于存储所述处理器可执行指令的存储器;
51.其中,所述处理器被配置为执行所述指令,以实现如上述任一项所述的程序数据处理方法。
52.根据本公开实施例的第四方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如上述任一项所述的程序数据处理方法。
53.根据本公开实施例的第五方面,提供一种计算机程序产品,所述计算机程序产品中包括指令,所述指令被电子设备的处理器执行时,使得所述电子设备能够执行如上述任一项所述的程序数据处理方法。
54.本公开的实施例提供的技术方案至少带来以下有益效果:
55.本公开的方案,通过获取设备活动数据对,设备活动数据对包括以第一树结构存储的基准数据和以第二树结构存储的目标数据,第一树结构用于表征目标设备调用基准应用程序中的各方法的堆栈关系和耗时情况,第二树结构用于表征目标设备调用目标应用程序中的各方法的堆栈关系和耗时情况,基准应用程序和目标应用程序为不同版本的同一应用程序,然后按照目标应用程序的不同程序运行阶段,分别在第一树结构和第二树结构中进行区域划分,得到与各程序运行阶段对应的第一树结构区域和第二树结构区域,进而针对任一程序运行阶段,确定第一树结构区域和第二树结构区域之间的相同节点,相同节点用于确定在任一程序运行阶段中被目标设备调用的存在耗时异常的方法,将各程序运行阶段对应的相同节点,作为设备活动数据对对应的相同节点集合,相同节点集合用于确定针对目标应用程序的耗时异常分析结果。如此,可以针对设备活动数据对,通过自动化分析比对,从第一树结构和第二树结构中查找出相同调用方法,提升了程序数据分析效率,能够准确得到有效分析结果。
56.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不
能限制本公开。
附图说明
57.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
58.图1是根据一示例性实施例示出的一种程序数据处理方法的流程图。
59.图2是根据一示例性实施例示出的一种树结构的示意图。
60.图3是根据一示例性实施例示出的一种相同节点确定步骤的流程图。
61.图4是根据一示例性实施例示出的一种相同节点比对流程的示意图。
62.图5是根据一示例性实施例示出的另一种程序数据处理方法的流程图。
63.图6是根据一示例性实施例示出的一种程序数据处理装置的框图。
64.图7是根据一示例性实施例示出的一种电子设备的框图。
具体实施方式
65.为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
66.需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。
67.还需要说明的是,本公开所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于展示的数据、分析的数据等),均为经用户授权或者经过各方充分授权的信息和数据。
68.图1是根据一示例性实施例示出的一种程序数据处理方法的流程图,如图1所示,本实施例以该方法应用于终端进行举例说明,可以理解的是,该方法也可以应用于服务器,还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。本实施例中,该方法包括以下步骤。
69.在步骤s110中,获取设备活动数据对;设备活动数据对包括以第一树结构存储的基准数据和以第二树结构存储的目标数据;
70.其中,基准数据和目标数据可以根据采集的systrace信息得到,第一树结构可以用于表征目标设备调用基准应用程序中的各方法的堆栈关系和耗时情况,第二树结构可以用于表征目标设备调用目标应用程序中的各方法的堆栈关系和耗时情况;第一树结构可以由多个多叉树结构组成,其可以根据目标设备调用基准应用程序中各方法的执行堆栈构造得到,同样,第二树结构也可以由多个多叉树结构组成,其可以根据目标设备调用目标应用程序中各方法的执行堆栈构造得到。
71.例如,多叉树结构可以为数据存储结构,其可以包括多层节点,上下两层节点之间存在父子节点关系、以及节点对应的方法之间的调用关系。以包括三层数据的多叉树结构为例,该多叉树结构可以依次为第一层根节点,第二层节点和第三层节点,其中,第二层节
点为第三层节点的父节点,第三层节点数据为第二层节点的子节点,父节点可以具有其所属的全部子节点的相关信息,父节点对应的方法可以调用其所属的子节点对应的方法。
72.作为一示例,基准应用程序和目标应用程序为不同版本的同一应用程序,可以采用相同机型的设备获取设备活动数据对。
73.在实际应用中,可以通过所采集的相同机型设备systrace信息,获取一组设备活动数据对,该组设备活动数据对可以包括以第一树结构存储的基准数据和以第二树结构存储的目标数据,以进一步根据第一树结构和第二树结构进行分析比对。
74.具体地,基于用于记录短期内设备活动的工具systrace,可以获取systrace信息,该systrace信息中包括与设备有关的数据信息,如cpu调度程序、磁盘活动和应用线程等信息,通过抓取设备的systrace信息可以分析设备性能,如应用程序启动事件、应用程序运行情况等。
75.在一示例中,随着终端设备中应用程序的功能日渐丰富,应用程序在启动阶段需要完成的任务也越来越多,任务量的增多会导致终端设备中应用程序的启动速度变慢、耗时增多,为了分析出导致应用程序启动事件变慢的原因,可以基于systrace信息对应用程序的启动性能进行对比,以确定应用程序启动耗时异常原因,如可以为所调用方法的执行时间变长、新增方法等。
76.例如,以应用程序的启动事件为例,可以采用相同机型的设备作为目标设备,针对基准应用程序(如启动耗时正常的应用程序a)和目标应用程序(如启动耗时异常的应用程序a),获取一组设备活动数据对,其可以包括根据基准systrace信息得到的基准数据,以及根据目标systrace信息得到的目标数据,进而可以基于数据存储结构进行构造,得到以第一树结构存储的基准数据和以第二树结构存储的目标数据。
77.在一个可选实施例中,通过对获取的systrace信息文件进行预处理,可以排除非应用程序a启动阶段的设备活动数据,进而可以基于预处理后数据进行后续应用程序启动性能分析,从而能够提升程序数据分析效率,预处理后数据可以包括应用程序a启动事件的全部进程和线程信息、各线程对应的根节点映射、启动事件各阶段对应的节点映射、主进程的所有线程信息、重复出现的slice节点集合(如重复出现的方法集合),还可以包括设备其它相关信息,在本实施例中不作具体限制。
78.在步骤s120中,按照目标应用程序的不同程序运行阶段,分别在第一树结构和第二树结构中进行区域划分,得到与各程序运行阶段对应的第一树结构区域和第二树结构区域;
79.其中,以应用程序的启动事件为例,可以根据目标应用程序的启动事件的不同程序运行阶段(如不同时间节点)对构造的树结构进行区域划分,例如,启动事件对应的拉取数据阶段、开屏展示阶段、首页显示阶段等。
80.在获取设备活动数据对后,可以按照目标应用程序的不同程序运行阶段,分别在第一树结构和第二树结构中进行区域划分,进而可以得到与各程序运行阶段对应的第一树结构区域和第二树结构区域,以进一步通过相同树节点比对的方式,从各程序运行阶段对应的第一树结构区域和第二树结构区域中查找出相同节点。
81.在一示例中,以应用程序的启动事件为例,可以根据启动事件对应的拉取数据阶段、开屏展示阶段、首页显示阶段,分别在第一树结构和第二树结构中进行区域划分,得到
拉取数据阶段对应的第一树结构区域和第二树结构区域、开屏展示阶段对应的第一树结构区域和第二树结构区域、首页显示阶段对应的第一树结构区域和第二树结构区域。
82.在步骤s130中,针对任一程序运行阶段,确定第一树结构区域和第二树结构区域之间的相同节点;相同节点用于确定在任一程序运行阶段中被目标设备调用的存在耗时异常的方法;
83.作为一示例,相同节点可以为第一树结构区域和第二树结构区域之间满足预设比对条件的节点,如相同节点的方法名相同、所属父节点的方法名相同、方法调用深度相同、所属节点具有的子节点相似度大于预设阈值。
84.在具体实现中,可以针对任一程序运行阶段,通过相同树节点比对的方式,确定第一树结构区域和第二树结构区域之间的相同节点,该相同节点可以进一步用于确定在任一程序运行阶段中被目标设备调用的存在耗时异常的方法。
85.例如,在构造出方法“森林”(即第一树结构和第二树结构)后,可以针对某个程序运行阶段,查找出该程序运行阶段对应的第一树结构区域和第二树结构区域之间相同的节点,以进一步进行节点对比分析。
86.在步骤s140中,将各程序运行阶段对应的相同节点,作为设备活动数据对对应的相同节点集合;相同节点集合用于确定针对目标应用程序的耗时异常分析结果。
87.在得到各程序运行阶段对应的相同节点后,可以将各程序运行阶段对应的相同节点,作为设备活动数据对对应的相同节点集合,以进一步根据相同节点集合确定针对目标应用程序的耗时异常分析结果。
88.相较于传统方法通过对systrace信息进行手动比对,如在对两份systrace信息进行比对的过程中,需要人工对相同的systrace节点进行查找,由于相同的方法可能会被调用多次,则相同的节点也会在systrace信息中出现多次,采用传统方法效率低、人工分析耗时费力;本实施例的技术方案,可以根据设备活动数据对中以第一树结构存储的基准数据和以第二树结构存储的目标数据,通过自动化分析对比systrace信息查找出相同节点,以进一步基于相同节点确定针对目标应用程序的耗时异常分析结果,能够提升分析效率、得出准确结果。
89.上述程序数据处理方法中,通过获取设备活动数据对,设备活动数据对包括以第一树结构存储的基准数据和以第二树结构存储的目标数据,然后按照目标应用程序的不同程序运行阶段,分别在第一树结构和第二树结构中进行区域划分,得到与各程序运行阶段对应的第一树结构区域和第二树结构区域,进而针对任一程序运行阶段,确定第一树结构区域和第二树结构区域之间的相同节点,相同节点用于确定在任一程序运行阶段中被目标设备调用的存在耗时异常的方法,将各程序运行阶段对应的相同节点,作为设备活动数据对对应的相同节点集合,相同节点集合用于确定针对目标应用程序的耗时异常分析结果。如此,可以针对设备活动数据对,通过自动化分析比对,从第一树结构和第二树结构中查找出相同调用方法,提升了程序数据分析效率,能够准确得到有效分析结果。
90.在一示例性实施例中,获取设备活动数据对,包括:获取目标设备对应的基准数据和目标数据;按照目标设备调用基准应用程序中的各方法的执行堆栈,采用基准数据构造第一树结构;按照目标设备调用目标应用程序中的各方法的执行堆栈,采用目标数据构造第二树结构。
91.其中,基准数据可以为目标设备运行基准应用程序时所产生的设备活动数据,目标数据可以为目标设备运行目标应用程序时所产生的设备活动数据,如基准应用程序可以为启动耗时正常的应用程序a,目标应用程序可以为启动耗时异常的应用程序a。
92.作为一示例,第一树结构和第二树结构中的各节点具有对应的节点信息,节点信息可以包括用于表征节点位置和堆栈关系的标识信息,以及用于表征所调用方法的运行状态和耗时情况的方法信息。
93.在实际应用中,以应用程序的启动事件为例,可以采用相同机型的设备作为目标设备,获取该目标设备对应的基准systrace信息文件和目标systrace信息文件,如systrace信息可以为一份html文件,其可以包含设备调用的所有方法的运行状态(如开始和结束)、耗时时长、时间戳等信息,然后可以使用预设的systrace信息文件处理工具,将html文件转化为数据库,进而可以将数据库中毫无关联的数据转换成一棵棵的slice树结构,即方法的执行堆栈,在该树结构中每个方法具有一个对应的slice节点,每棵树结构的每个节点均具有slice节点id和parent父节点id,即标识信息,其可以用于确定节点位置和堆栈关系。
94.在一示例中,如图2所示,以包括三层数据的多叉树结构为例,slice节点id可以按照第一层根节点至第二层节点从左往右,再至第三层节点从左往右的顺序依次递增,在进行对比时也可以根据该递增顺序进行节点遍历,如图2中1-7的遍历顺序,parent父节点id为null时即为每棵树结构的根节点,然后可以根据每个节点的slice节点id和parent父节点id,如图2中方法a调用了方法c、方法d、方法e、方法f,节点c、节点d、节点e、节点f是节点a的子节点,节点a是节点c、节点d、节点e、节点f的父节点,构造出一颗颗多叉树结构,进而形成整片树结构“森林”,即以第一树结构存储的基准数据和以第二树结构存储的目标数据。
95.例如,以应用程序的启动事件为例,可以采用相同机型的设备a和设备b,在该设备a中运行启动耗时正常的应用程序a,在该设备b中运行启动耗时异常的应用程序a,通过同时抓取应用程序a启动事件对应的systrace信息,可以获取一组设备活动数据对,包括启动耗时正常的基准数据和启动耗时异常的目标数据,以进一步进行启动性能对比分析;一组设备活动数据对是独立的,其包含的基准数据和目标数据采集时间相同。
96.本实施例的技术方案,通过获取目标设备对应的基准数据和目标数据,进而按照目标设备调用基准应用程序中的各方法的执行堆栈,采用基准数据构造第一树结构,并按照目标设备调用目标应用程序中的各方法的执行堆栈,采用目标数据构造第二树结构,可以构造出第一树结构和第二树结构,为后续自动化分析比对树结构中相同节点提供了数据支持。
97.在一示例性实施例中,如图3所示,针对任一程序运行阶段,确定第一树结构区域和第二树结构区域之间的相同节点,还可以包括如下步骤:
98.在步骤s310中,获取预设的第一比对条件;第一比对条件用于判定节点之间的节点属性标识是否相匹配;
99.作为一示例,节点属性标识可以包括所属节点标识、所属父节点标识、节点层级深度,分别可以用于表征节点对应的方法名、所属父节点的方法名、节点对应的方法调用深度。
100.在实际应用中,可以获取预设的第一比对条件,该第一比对条件可以用于判定节
点之间的节点属性标识是否相匹配,如节点之间的的方法名是否相同、所属父节点的方法名是否相同、方法调用深度是否相同。
101.在一示例中,由于systrace方法堆栈是一种多叉树结构,当节点深度为0时(depth=0)即为树结构的根节点,一个父节点可以同时拥有多个子节点,基于systrace多叉树结构的特点,在查找相同节点过程中可以考虑如下条件:
102.1、方法堆栈是有层级的,则相同节点对应的树节点深度一致。
103.2、相同方法(即相同节点)的父节点对应的方法名是相同的。
104.在步骤s320中,针对任一程序运行阶段,将程序运行阶段对应的第一树结构区域中的任一节点作为待查找节点,按照第一比对条件,从程序运行阶段对应的第二树结构区域中确定针对待查找节点的候选节点;
105.在具体实现中,可以针对任一程序运行阶段,按照第一比对条件,遍历该程序运行阶段对应的第一树结构区域中的各节点,进而可以通过将第一树结构区域中的任一节点作为待查找节点,从程序运行阶段对应的第二树结构区域中确定针对待查找节点的候选节点。
106.例如,针对第一树结构区域中的待查找节点,可以将第二树结构区域中,与该待查找节点的方法名、所属父节点的方法名、方法调用深度均相同的节点,作为候选节点。
107.在一示例中,如图4所示,针对任一程序运行阶段,可以选取该程序运行阶段对应的第一树结构区域内的树结构进行节点遍历,通过将第一树结构区域中的任一节点作为待查找节点(如图4节点a),可以在程序运行阶段对应的第二树结构区域内进行节点查找,如在第二树结构区域中遍历至节点b时,可以针对节点b与节点a进行如下基本信息对比:
108.1、节点b对应的方法名与节点a对应的方法名是否相同;
109.2、节点b所属的父节点对应的方法名与节点a所属的父节点对应的方法名是否相同;
110.3、节点b对应的方法调用深度与节点a对应的方法调用深度是否相同;
111.若未满足以上三个基本信息,则不是相同节点。
112.在步骤s330中,从候选节点中确定待查找节点对应的匹配节点,将第一树结构区域中各节点对应的匹配节点,作为程序运行阶段中第一树结构区域和第二树结构区域之间的相同节点。
113.在得到候选节点后,可以按照第二比对条件进一步比对待查找节点与各候选节点,进而可以从候选节点中确定待查找节点对应的匹配节点,并可以将第一树结构区域中各节点对应的匹配节点,作为程序运行阶段中第一树结构区域和第二树结构区域之间的相同节点。
114.具体地,针对第一树结构区域中的待查找节点,可以将第二树结构区域中,与该待查找节点的方法名、所属父节点的方法名、方法调用深度均相同,且子节点相似度大于预设阈值的节点,作为匹配节点。
115.在一示例中,由于需要比对子节点情况,在查找相同节点过程中还可以考虑如下条件:
116.1、相同方法(即相同节点)各自具有的全部子节点是相似的(已考虑子方法存在调用顺序改变的情况),即子节点相似度大于预设阈值,如子节点相似度大于90%,且由于子
节点还可以具有子节点以及孙节点,则可以采用递归算法进行节点比对。
117.例如,子方法存在调用顺序改变的情况可以为,在《systrace 1》(即第一树结构区域)中方法a先调用了方法b,然后调用了方法c,而在《systrace 2》中(即第二树结构区域)中方法a先调用了方法c,然后调用了方法b,该情况可能是业务逻辑的调整,
118.本实施例的技术方案,通过获取预设的第一比对条件,然后针对任一程序运行阶段,将程序运行阶段对应的第一树结构区域中的任一节点作为待查找节点,按照第一比对条件,从程序运行阶段对应的第二树结构区域中确定针对待查找节点的候选节点,进而从候选节点中确定待查找节点对应的匹配节点,将第一树结构区域中各节点对应的匹配节点,作为程序运行阶段中第一树结构区域和第二树结构区域之间的相同节点,能够准确对比得到第一树结构区域和第二树结构区域之间的相同节点。
119.在一示例性实施例中,从候选节点中确定待查找节点对应的匹配节点,包括:获取预设的第二比对条件;第二比对条件用于判定候选节点与待查找节点的节点关联标识是否相匹配;若检测到任一候选节点与待查找节点满足第二比对条件,将任一候选节点作为匹配节点。
120.其中,节点关联标识可以用于指示所属节点具有的子节点,以便于进一步比对节点之间的子节点情况,如子节点相似度是否大于90%。
121.在一示例中,如图4所示,若满足三个基本信息,即节点的方法名、所属父节点的方法名、方法调用深度均相同,则可以采用如下方式对子节点进行相似度判断:
122.1、通过定义相似子节点数量,其可以用于表征待查找节点与候选节点中相似子节点的数量;
123.2、可以遍历待查找节点a的全部子节点,并记录每个子节点为a;
124.3、可以遍历某个候选节点b的全部子节点,并记录每个子节点为b,若查找到任一子节点b的标识和子节点a的标识相同,则将相似子节点数量的值增加1;
125.4、在遍历结束后,可以计算相似子节点数量和待查找节点a的全部子节点数量的比例,得到待查找节点a与某个候选节点b之间的子节点相似度。
126.在又一示例中,若通过比对节点之间的子节点情况,得到子节点相似度大于预设阈值,如子节点相似度大于90%,则可以将两个节点确定为相同节点。
127.本实施例的技术方案,通过获取预设的第二比对条件,若检测到任一候选节点与待查找节点满足第二比对条件,将任一候选节点作为匹配节点,能够准确对比得到相同节点,提升了程序数据分析效率。
128.在一示例性实施例中,在按照目标应用程序的不同程序运行阶段,分别在第一树结构和第二树结构中进行区域划分,得到与各程序运行阶段对应的第一树结构区域和第二树结构区域的步骤之后,还包括:针对任一程序运行阶段,遍历程序运行阶段对应的第二树结构区域中的任一节点;若检测到程序运行阶段对应的第一树结构区域中未存在与任一节点相同的节点,则将任一节点作为程序运行阶段对应的新增方法节点,以得到设备活动数据对对应的新增方法集合。
129.在具体实现中,可以针对任一程序运行阶段,遍历第二树结构中的任一节点,若检测到第一树结构中未存在与任一节点相同的节点,如在第一树结构中未查找到与第二树结构中任一节点相同的节点,则可以将该第二树结构中的任一节点作为程序运行阶段对应的
新增方法节点,并可以将该新增方法节点添加至设备活动数据对对应的新增方法集合。
130.本实施例的技术方案,通过针对任一程序运行阶段,遍历程序运行阶段对应的第二树结构区域中的任一节点,若检测到程序运行阶段对应的第一树结构区域中未存在与任一节点相同的节点,则将任一节点作为程序运行阶段对应的新增方法节点,以得到设备活动数据对对应的新增方法集合,可以有效查找出不相同的新增方法节点,为后续得到耗时异常分析结果提供了数据支持。
131.在一示例性实施例中,在将各程序运行阶段对应的相同节点,作为设备活动数据对对应的相同节点集合的步骤之后,还包括:从设备活动数据对对应的相同节点集合中确定方法异常节点;方法异常节点包括耗时异常节点和调用异常节点;根据耗时异常节点、调用异常节点,以及新增方法集合,得到设备活动数据对对应的目标节点集合;获取多组设备活动数据对对应的目标节点集合之间的交集,得到针对目标应用程序的耗时异常分析结果。
132.在实际应用中,可以针对查找出的相同节点,根据相同节点之间的方法信息差异,从相同节点集合中确定方法异常节点,该方法异常节点可以包括耗时异常节点和调用异常节点,例如,若相同节点在第一树结构和第二树结构中均未重复,即该相同节点在第一树结构和第二树结构中的节点数量均为1个,则可以根据第一树结构中该相同节点对应的方法信息,以及第二树结构中该相同节点对应的方法信息进行耗时时长比较,可以在判定第二树结构中该相同节点的耗时时长增加时,确定为耗时异常节点。
133.又如,若相同节点在第一树结构和第二树结构中存在重复,即该相同节点在第一树结构和第二树结构中的节点数量为多个,则可以判断第一树结构中该相同节点的调用次数与第二树结构中该相同节点的调用次数是否相同,进而可以在调用次数相同时通过计算整体耗时情况,若整体耗时时长增加,则为耗时异常节点,在第二树结构中该相同节点的调用次数增多时,确定为调用异常节点。
134.在一示例中,可以根据耗时异常节点、调用异常节点,以及新增方法集合,得到设备活动数据对对应的目标节点集合,该目标节点集合中的节点可以用于表征执行目标应用程序过程中被目标设备调用的存在耗时异常的方法,如目标节点集合中的节点对应的方法可以为执行时间变长的方法、新增方法等,以使得目标应用程序存在着启动耗时异常情况。
135.在又一示例中,可以获取多组设备活动数据对对应的目标节点集合之间的交集,得到针对目标应用程序的耗时异常分析结果,如通过多组比对结果取交集,即获取由不同机型的设备作为目标设备所得到的各目标节点集合,可以基于多份systrace信息的分析结果得到分析结果交集,从而能够消除不同机型设备产生的影响,准确查找出应用程序启动耗时异常原因。
136.本实施例的技术方案,通过从设备活动数据对对应的相同节点集合中确定方法异常节点,然后根据耗时异常节点、调用异常节点,以及新增方法集合,得到设备活动数据对对应的目标节点集合,进而获取多组设备活动数据对对应的目标节点集合之间的交集,得到针对目标应用程序的耗时异常分析结果,能够避免误差,得到准确有效的分析结果。
137.在一示例性实施例中,根据耗时异常节点、调用异常节点,以及新增方法集合,得到设备活动数据对对应的目标节点集合,包括:对耗时异常节点、调用异常节点,以及新增方法集合中的冗余节点进行过滤,将过滤后节点作为设备活动数据对对应的目标节点集
合。
138.在具体实现中,可以针对耗时异常节点,若为单个子节点耗时时长增加所导致的父节点耗时时长增加,则说明父节点是冗余节点,可以只需保留该子节点;若为多个子节点耗时时长增加所导致的父节点耗时时长增加,可以通过判定各子节点增加的耗时时长,在总增加的耗时时长中的各自占比,若大于50%则说明该子节点耗时增加占比大,则保留该子节点,其余子节点考虑耗时增加情况,将增加的耗时时长小于5ms的子节点过滤去除;若多个子节点增加的耗时时长较为平均,则继续保留父节点。针对新增方法节点和调用异常节点,可以只保留该新增方法节点和调用异常节点对应的根节点,子节点不需要保留。
139.在得到针对耗时异常节点的过滤结果和针对新增方法节点和调用异常节点的过滤结果后,还可以判断过滤结果中是否存在预设系统方法对应的节点,以及耗时时长小于预设阈值的节点,如执行耗时小于5ms的超小方法,可以对存在预设系统方法对应的节点进行过滤,以及耗时时长小于预设阈值的节点进行过滤,进而可以得到过滤后节点。
140.本实施例的技术方案,通过对耗时异常节点、调用异常节点,以及新增方法集合中的冗余节点进行过滤,将过滤后节点作为设备活动数据对对应的目标节点集合,能够得到准确且精炼的分析结果。
141.图5是根据一示例性实施例示出的另一种程序数据处理方法的流程图,如图5所示,该方法用于终端等计算机设备中,包括以下步骤。
142.在步骤s510中,获取设备活动数据对;设备活动数据对包括以第一树结构存储的基准数据和以第二树结构存储的目标数据,基准应用程序和目标应用程序为不同版本的同一应用程序。在步骤s520中,按照目标应用程序的不同程序运行阶段,分别在第一树结构和第二树结构中进行区域划分,得到与各程序运行阶段对应的第一树结构区域和第二树结构区域。在步骤s530中,获取预设的第一比对条件;第一比对条件用于判定节点之间的节点属性标识是否相匹配。在步骤s540中,针对任一程序运行阶段,将程序运行阶段对应的第一树结构区域中的任一节点作为待查找节点,按照第一比对条件,从程序运行阶段对应的第二树结构区域中确定针对待查找节点的候选节点。在步骤s550中,获取预设的第二比对条件;第二比对条件用于判定候选节点与待查找节点的节点关联标识是否相匹配。在步骤s560中,若检测到任一候选节点与待查找节点满足第二比对条件,将任一候选节点作为匹配节点。在步骤s570中,将第一树结构区域中各节点对应的匹配节点,作为程序运行阶段中第一树结构区域和第二树结构区域之间的相同节点;相同节点用于确定在任一程序运行阶段中被目标设备调用的存在耗时异常的方法。在步骤s580中,将各程序运行阶段对应的相同节点,作为设备活动数据对对应的相同节点集合;相同节点集合用于确定针对目标应用程序的耗时异常分析结果。需要说明的是,上述步骤的具体限定可以参见上文对一种程序数据处理方法的具体限定,在此不再赘述。
143.应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的
步骤或者阶段的至少一部分轮流或者交替地执行。
144.可以理解的是,本说明书中上述方法的各个实施例之间相同/相似的部分可互相参见,每个实施例重点说明的是与其他实施例的不同之处,相关之处参见其他方法实施例的说明即可。
145.基于同样的发明构思,本公开实施例还提供了一种用于实现上述所涉及的程序数据处理方法的程序数据处理装置。
146.图6是根据一示例性实施例示出的一种程序数据处理装置框图。参照图6,该装置包括:
147.设备活动数据对获取单元601,被配置为执行获取设备活动数据对;所述设备活动数据对包括以第一树结构存储的基准数据和以第二树结构存储的目标数据,所述第一树结构用于表征目标设备调用基准应用程序中的各方法的堆栈关系和耗时情况,所述第二树结构用于表征所述目标设备调用目标应用程序中的各方法的堆栈关系和耗时情况,所述基准应用程序和所述目标应用程序为不同版本的同一应用程序;
148.树结构区域划分单元602,被配置为执行按照所述目标应用程序的不同程序运行阶段,分别在所述第一树结构和所述第二树结构中进行区域划分,得到与各所述程序运行阶段对应的第一树结构区域和第二树结构区域;
149.相同节点确定单元603,被配置为执行针对任一所述程序运行阶段,确定所述第一树结构区域和所述第二树结构区域之间的相同节点;所述相同节点用于确定在所述任一程序运行阶段中被所述目标设备调用的存在耗时异常的方法;
150.相同节点集合得到单元604,被配置为执行将各所述程序运行阶段对应的相同节点,作为所述设备活动数据对对应的相同节点集合;所述相同节点集合用于确定针对所述目标应用程序的耗时异常分析结果。
151.在一种可能实现方式中,所述设备活动数据对获取单元601,具体被配置为执行获取目标设备对应的基准数据和目标数据;所述基准数据为所述目标设备运行所述基准应用程序时所产生的设备活动数据,所述目标数据为所述目标设备运行所述目标应用程序时所产生的设备活动数据;按照所述目标设备调用所述基准应用程序中的各方法的执行堆栈,采用所述基准数据构造所述第一树结构;按照所述目标设备调用所述目标应用程序中的各方法的执行堆栈,采用所述目标数据构造所述第二树结构;其中,所述第一树结构和所述第二树结构中的各节点具有对应的节点信息,所述节点信息包括用于表征节点位置和堆栈关系的标识信息,以及用于表征所调用方法的运行状态和耗时情况的方法信息。
152.在一种可能实现方式中,所述相同节点确定单元603,具体被配置为执行获取预设的第一比对条件;所述第一比对条件用于判定节点之间的节点属性标识是否相匹配,所述节点属性标识包括所属节点标识、所属父节点标识、节点层级深度;针对任一所述程序运行阶段,将所述程序运行阶段对应的第一树结构区域中的任一节点作为待查找节点,按照所述第一比对条件,从所述程序运行阶段对应的第二树结构区域中确定针对所述待查找节点的候选节点;从所述候选节点中确定所述待查找节点对应的匹配节点,将所述第一树结构区域中各节点对应的匹配节点,作为所述程序运行阶段中所述第一树结构区域和所述第二树结构区域之间的相同节点。
153.在一种可能实现方式中,所述相同节点确定单元603,具体被配置为执行获取预设
的第二比对条件;所述第二比对条件用于判定所述候选节点与所述待查找节点的节点关联标识是否相匹配,所述节点关联标识用于指示所属节点具有的子节点;若检测到任一所述候选节点与所述待查找节点满足所述第二比对条件,将任一所述候选节点作为所述匹配节点。
154.在一种可能实现方式中,所述程序数据处理装置,还包括:
155.节点遍历单元,具体被配置为执行针对任一所述程序运行阶段,遍历所述程序运行阶段对应的第二树结构区域中的任一节点;
156.新增方法节点确定单元,具体被配置为执行若检测到所述程序运行阶段对应的第一树结构区域中未存在与所述任一节点相同的节点,则将所述任一节点作为所述程序运行阶段对应的新增方法节点,以得到所述设备活动数据对对应的新增方法集合。
157.在一种可能实现方式中,所述程序数据处理装置,还包括:
158.方法异常节点确定单元,具体被配置为执行从所述设备活动数据对对应的相同节点集合中确定方法异常节点;所述方法异常节点包括耗时异常节点和调用异常节点;
159.目标节点集合得到单元,具体被配置为执行根据所述耗时异常节点、所述调用异常节点,以及所述新增方法集合,得到所述设备活动数据对对应的目标节点集合;
160.交集操作单元,具体被配置为执行获取多组所述设备活动数据对对应的目标节点集合之间的交集,得到针对所述目标应用程序的耗时异常分析结果。
161.在一种可能实现方式中,所述目标节点集合得到单元,具体被配置为执行对所述耗时异常节点、所述调用异常节点,以及所述新增方法集合中的冗余节点进行过滤,将过滤后节点作为所述设备活动数据对对应的目标节点集合。
162.关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
163.上述程序数据处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
164.图7是根据一示例性实施例示出的一种用于实现一种程序数据处理方法的电子设备700的框图。例如,电子设备700可以是移动电话、计算机、数字广播终端、消息收发设备、游戏控制台、平板设备、医疗设备、健身设备、个人数字助理等。
165.参照图7,电子设备700可以包括以下一个或多个组件:处理组件702、存储器704、电源组件706、多媒体组件708、音频组件710、输入/输出(i/o)的接口712、传感器组件714以及通信组件716。
166.处理组件702通常控制电子设备700的整体操作,诸如与显示、电话呼叫、数据通信、相机操作和记录操作相关联的操作。处理组件702可以包括一个或多个处理器720来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件702可以包括一个或多个模块,便于处理组件702和其他组件之间的交互。例如,处理组件702可以包括多媒体模块,以方便多媒体组件708和处理组件702之间的交互。
167.存储器704被配置为存储各种类型的数据以支持在电子设备700的操作。这些数据的示例包括用于在电子设备700上操作的任何应用程序或方法的指令、联系人数据、电话簿数据、消息、图片、视频等。存储器704可以由任何类型的易失性或非易失性存储设备或者它
们的组合实现,如静态随机存取存储器(sram)、电可擦除可编程只读存储器(eeprom)、可擦除可编程只读存储器(eprom)、可编程只读存储器(prom)、只读存储器(rom)、磁存储器、快闪存储器、磁盘、光盘或石墨烯存储器。
168.电源组件706为电子设备700的各种组件提供电力。电源组件706可以包括电源管理系统,一个或多个电源,及其他与为电子设备700生成、管理和分配电力相关联的组件。
169.多媒体组件708包括在所述电子设备700和用户之间的提供输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(lcd)和触摸面板(tp)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件708包括前置摄像头和/或后置摄像头。当电子设备700处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是固定的光学透镜系统或具有焦距和光学变焦能力。
170.音频组件710被配置为输出和/或输入音频信号。例如,音频组件710包括麦克风(mic),当电子设备700处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器704或经由通信组件716发送。在一些实施例中,音频组件710还包括扬声器,用于输出音频信号。
171.i/o接口712为处理组件702和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
172.传感器组件714包括一个或多个传感器,用于为电子设备700提供各个方面的状态评估。例如,传感器组件714可以检测到电子设备700的打开/关闭状态,组件的相对定位,例如所述组件为电子设备700的显示器和小键盘,传感器组件714还可以检测电子设备700或电子设备700组件的位置改变,用户与电子设备700接触的存在或不存在,设备700方位或加速/减速和电子设备700的温度变化。传感器组件714可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件714还可以包括光传感器,如cmos或ccd图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件714还可以包括加速度传感器、陀螺仪传感器、磁传感器、压力传感器或温度传感器。
173.通信组件716被配置为便于电子设备700和其他设备之间有线或无线方式的通信。电子设备700可以接入基于通信标准的无线网络,如wifi,运营商网络(如2g、3g、4g或5g),或它们的组合。在一个示例性实施例中,通信组件716经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件716还包括近场通信(nfc)模块,以促进短程通信。例如,在nfc模块可基于射频识别(rfid)技术,红外数据协会(irda)技术,超宽带(uwb)技术,蓝牙(bt)技术和其他技术来实现。
174.在示例性实施例中,电子设备700可以被一个或多个应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
175.在示例性实施例中,还提供了一种包括指令的计算机可读存储介质,例如包括指令的存储器704,上述指令可由电子设备700的处理器720执行以完成上述方法。例如,计算
机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等。
176.在示例性实施例中,还提供一种计算机程序产品,所述计算机程序产品中包括指令,上述指令可由电子设备700的处理器720执行以完成上述方法。
177.需要说明的,上述的装置、电子设备、计算机可读存储介质、计算机程序产品等根据方法实施例的描述还可以包括其他的实施方式,具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。
178.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
179.应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献