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

定位程序宕机位置的方法、装置、电子设备、存储介质与流程

2022-04-02 07:17:41 来源:中国专利 TAG:


1.本发明涉及计算机系统技术领域,尤其涉及一种定位程序宕机位置的方法、装置、电子设备、存储介质。


背景技术:

2.一个现代计算机系统的基本组成包括soc系统级芯片、内存、固件、输入、输出设备、存储设备等。
3.现代计算机bios(基本输入输出系统)遵循uefi(统一可扩展固件接口)规范实现,又称uefi bios,其运行模式分为以下两种:
4.1、debug模式:又称调试模式,此模式的bios能够通过串口等方式输出启动日志和调试信息。
5.2、release模式:又称发布模式,此模式的bios关闭了串口输出的调试信息和日志,提高了启动速度。
6.在计算机系统(芯片、个人电脑、工作站、服务器等)研发过程中,bios启动或进行重启reboot老化测试时会选择使用release模式bios来测试,以缩短测试时间,提高测试效率。在此过程中经常会遇到宕机问题,并且有些宕机问题在同等环境中使用debug模式bios时不出现,使用release模式bios时才会出现。
7.release模式bios一般是通过80端口输出到主板的数码管等载体上的post code(开机自检代码)来判断bios的执行阶段,当同等环境下release模式bios会宕机而debug模式bios不会宕机时,就无法依赖串口调试等方式来定位宕机位置。


技术实现要素:

8.本发明提供的定位程序宕机位置的方法、装置、电子设备、存储介质,能够定位程序的宕机位置。
9.第一方面,本发明提供一种定位程序宕机位置的方法,包括:
10.当程序运行过程中系统发生宕机时,获取宕机时运行的当前程序模块的全局唯一标识符、所述当前程序模块的全局唯一标识符对应的入口物理地址;
11.读取宕机时所述系统中的指令地址寄存器所存储的指令地址寄存器的物理地址;
12.将所述指令地址寄存器的物理地址减去所述入口物理地址,得到第一偏移地址;
13.根据程序模块的全局唯一标识符和映射文件之间的对应关系,获取所述当前程序模块的全局唯一标识符对应的第一映射文件;所述第一映射文件记录有程序模块中各个函数名称和函数的偏移地址之间的对应关系;
14.根据所述第一映射文件,查找所述第一偏移地址对应的第一函数名称;
15.根据所述第一映射文件,查找所述第一函数名称对应的函数的偏移地址;
16.将所述第一函数名称对应的函数的偏移地址作为宕机位置,并输出。
17.可选地,所述当程序运行过程中系统发生宕机时,获取宕机时运行的当前程序模
块的全局唯一标识符、所述当前程序模块的全局唯一标识符对应的入口物理地址的步骤之前,所述方法包括:
18.在所述程序的编译阶段,生成各个程序模块对应的映射文件,所述映射文件记录有每个所述程序模块中各个函数名称和函数的偏移地址之间的对应关系。
19.可选地,所述当程序运行过程中系统发生宕机时,获取宕机时运行的当前程序模块的全局唯一标识符、所述当前程序模块的全局唯一标识符对应的入口物理地址的步骤之前,所述方法包括:
20.在所述程序的运行过程中,将正在执行的当前程序模块对应的全局唯一标识符和对应的入口物理地址作为一条记录依次存储。
21.可选地,所述在所述程序的运行过程中,将正在执行的当前程序模块对应的全局唯一标识符和对应的入口物理地址作为一条记录依次存储的步骤包括:
22.指定一段存储区域;
23.在所述程序的运行过程中,在所述存储区域,将正在执行的当前程序模块的全局唯一标识符和对应的入口物理地址作为一条记录依次存储。
24.可选地,所述当程序运行过程中系统发生宕机时,获取宕机时运行的当前程序模块的全局唯一标识符、所述当前程序模块的全局唯一标识符对应的入口物理地址的步骤具体为:
25.获取系统发生宕机前最后一次存储的当前程序模块对应的全局唯一标识符和入口物理地址。
26.可选地,所述获取系统发生宕机前最后一次存储的当前程序模块对应的全局唯一标识符和入口物理地址的步骤具体为:
27.在所述存储区域,获取宕机前最后一次存储的程序模块对应的全局唯一标识符和入口物理地址。
28.可选地,所述程序为基本输入/输出系统bios;和/或
29.所述存储区域为内存。
30.第二方面,本发明还提供一种定位程序宕机位置的装置,包括:
31.第一获取单元,用于当程序运行过程中系统发生宕机时,获取宕机时运行的当前程序模块的全局唯一标识符、所述当前程序模块的全局唯一标识符对应的入口物理地址;
32.读取单元,用于读取宕机时所述系统中的指令地址寄存器所存储的指令地址寄存器的物理地址;
33.计算单元,用于将所述指令地址寄存器的物理地址减去所述入口物理地址,得到第一偏移地址;
34.第二获取单元,用于根据程序模块的全局唯一标识符和映射文件之间的对应关系,获取所述当前程序模块的全局唯一标识符对应的第一映射文件;所述第一映射文件记录有程序模块中各个函数名称和函数的偏移地址之间的对应关系;
35.查找单元,用于根据所述第一映射文件,查找所述第一偏移地址对应的第一函数名称;根据所述第一映射文件,查找所述第一函数名称对应的函数的偏移地址;
36.输出单元,用于将所述第一函数名称对应的函数的偏移地址作为宕机位置,并输出。
37.第三方面,本发明还提供一种电子设备,所述电子设备包括上述定位程序宕机位置的装置。
38.第四方面,本发明还提供一种定位程序宕机位置的装置,包括:
39.存储器;
40.以及耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行所述的定位程序宕机位置的方法。
41.第五方面,本发明还提供一种计算机可读存储介质,其中,所述计算机可读存储介质存储有计算机指令,所述计算机指令被处理器执行时实现所述的定位程序宕机位置的方法。
42.本发明提供的定位程序宕机位置的方法、装置、电子设备、存储介质,当程序运行过程中系统发生宕机时,获取宕机时运行的当前程序模块、所述当前程序模块对应的入口物理地址;读取宕机时所述系统中的指令地址寄存器rip所存储的指令地址寄存器的物理地址;将所述指令地址寄存器的物理地址减去所述入口物理地址,得到第一偏移地址;根据程序模块和映射文件之间的对应关系,获取所述当前程序模块对应的第一映射文件;所述映射文件记录有程序模块中各个函数及对应的偏移地址;根据所述第一映射文件,查找所述第一偏移地址对应的函数;将所述函数对应的函数的偏移地址作为宕机位置,并输出,因此能够定位宕机时程序的函数位置。
附图说明
43.图1为本发明一实施例定位程序宕机位置的方法的流程图;
44.图2为本发明另一实施例定位程序宕机位置的方法的流程图;
45.图3为本发明一实施例所述的定位程序宕机位置的装置的结构示意图;
46.图4为本发明一实施例所述的定位程序宕机位置的装置的结构示意图。
具体实施方式
47.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
48.本发明实施例提供一种定位程序宕机位置的方法,如图1所示,所述方法包括:
49.步骤11,当程序运行过程中系统发生宕机时,获取宕机时运行的当前程序模块的全局唯一标识符(globally unique identifier,guid)、所述当前程序模块的全局唯一标识符对应的入口物理地址;其中,程序可以为bios,也可以为其他程序。每个程序包括多个程序模块,多个程序模块运行在程序的不同阶段。每个程序模块包括至少一个函数。
50.步骤12,读取宕机时所述系统中的指令地址寄存器所存储的指令地址寄存器的物理地址;其中,指令地址寄存器用于保存当前执行的指令的物理地址。
51.步骤13,将所述指令地址寄存器的物理地址减去所述入口物理地址,得到第一偏移地址;
52.步骤14,根据程序模块的全局唯一标识符和映射文件之间的对应关系,获取所述
当前程序模块的全局唯一标识符对应的第一映射文件;所述第一映射文件记录有程序模块中各个函数名称和函数的偏移地址之间的对应关系;
53.步骤15,根据所述第一映射文件,查找所述第一偏移地址对应的第一函数名称;并根据所述第一映射文件,查找所述第一函数名称对应的函数的偏移地址;
54.步骤16,将所述第一函数名称对应的函数的偏移地址作为宕机位置,并输出。
55.上述实施例中,当程序运行过程中系统发生宕机时,获取宕机时运行的当前程序模块、所述当前程序模块对应的入口物理地址;读取宕机时所述系统中的指令地址寄存器rip所存储的指令地址寄存器的物理地址;将所述指令地址寄存器的物理地址减去所述入口物理地址,得到第一偏移地址;根据程序模块和映射文件之间的对应关系,获取所述当前程序模块对应的第一映射文件;所述映射文件记录有程序模块中各个函数及对应的偏移地址;根据所述第一映射文件,查找所述第一偏移地址对应的函数;将所述函数对应的函数的偏移地址作为宕机位置,并输出,因此能够定位宕机时程序的函数位置。本发明也可以用于release模式bios的调试场景,或者其他程序的调试场景。
56.本发明实施例还提供另一种定位程序宕机位置的方法,如图2所示,所述方法包括:
57.步骤11a,在所述程序的编译阶段,生成各个程序模块对应的映射文件,所述映射文件记录有每个所述程序模块中各个函数名称和函数的偏移地址之间的对应关系。每个程序包括多个程序模块,多个程序模块运行在程序的不同阶段。每个程序模块包括至少一个函数。
58.步骤11b,在所述程序的运行过程中,将正在执行的当前程序模块对应的全局唯一标识符和对应的入口物理地址作为一条记录依次存储。该步骤具体为:指定一段存储区域;在所述程序的运行过程中,在所述存储区域,将正在执行的当前程序模块的全局唯一标识符和对应的入口物理地址作为一条记录依次存储。其中,所述程序为bios;和/或所述存储区域为内存。
59.步骤11,当程序运行过程中系统发生宕机时,获取宕机时运行的当前程序模块的全局唯一标识符、所述当前程序模块的全局唯一标识符对应的入口物理地址;该步骤具体为:获取系统发生宕机前最后一次存储的当前程序模块对应的全局唯一标识符和入口物理地址。也可以为:在所述存储区域,获取宕机前最后一次存储的程序模块对应的全局唯一标识符和入口物理地址。其中,存储区域可以为内存。
60.步骤12,读取宕机时所述系统中的指令地址寄存器rip所存储的指令地址寄存器的物理地址;
61.步骤13,将所述指令地址寄存器的物理地址减去所述入口物理地址,得到第一偏移地址;
62.步骤14,根据程序模块的全局唯一标识符和映射文件之间的对应关系,获取所述当前程序模块的全局唯一标识符对应的第一映射文件;所述第一映射文件记录有程序模块中各个函数名称和函数的偏移地址之间的对应关系;
63.步骤15,根据所述第一映射文件,查找所述第一偏移地址对应的第一函数名称;并根据所述第一映射文件,查找所述第一函数名称对应的函数的偏移地址;
64.步骤16,将所述第一函数名称对应的函数的偏移地址作为宕机位置,并输出。
65.本发明实施例还提供一种定位程序宕机位置的装置,如图3所示,所述装置包括:
66.第一获取单元31,用于当程序运行过程中系统发生宕机时,获取宕机时运行的当前程序模块的全局唯一标识符、所述当前程序模块的全局唯一标识符对应的入口物理地址;
67.读取单元32,用于读取宕机时所述系统中的指令地址寄存器所存储的指令地址寄存器的物理地址;
68.计算单元33,用于将所述指令地址寄存器的物理地址减去所述入口物理地址,得到第一偏移地址;
69.第二获取单元34,用于根据程序模块的全局唯一标识符和映射文件之间的对应关系,获取所述当前程序模块的全局唯一标识符对应的第一映射文件;所述第一映射文件记录有程序模块中各个函数名称和函数的偏移地址之间的对应关系;
70.查找单元35,用于根据所述第一映射文件,查找所述第一偏移地址对应的第一函数名称;根据所述第一映射文件,查找所述第一函数名称对应的函数的偏移地址;
71.输出单元36,用于将所述第一函数名称对应的函数的偏移地址作为宕机位置,并输出。
72.本实施例的装置,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
73.本发明实施例还提供一种电子设备,包括上述定位程序宕机位置的装置。
74.本发明实施例还提供一种定位程序宕机位置的装置,如图4所示,所述装置包括:
75.存储器42;
76.以及耦接至所述存储器42的处理器41,所述处理器41被配置为基于存储在所述存储器42中的指令,执行上述定位程序宕机位置的方法。
77.本发明实施例还提供一种计算机可读存储介质,其中,所述计算机可读存储介质存储有计算机指令,所述计算机指令被处理器执行时实现上述定位程序宕机位置的方法。
78.以下描述本发明的应用场景。本应用场景以bios为例。针对现有技术中release模式bios宕机问题无法依赖串口输出日志来调试的现状,提出了一种精确定位宕机位置的方法,有效缩短宕机问题分析周期。
79.uefi bios启动分为多个阶段,每个阶段都由多个模块(例如.efi格式文件)组成,每个模块绑定唯一的全局唯一标识符。在bios启动初期,首先在bios中指定一个合适的内存地址p,基于地址p申请一段内存区域a。在之后的启动过程中,把每个程序模块的全局唯一标识符和entry地址(也就是上述的入口物理地址)作为一条记录在a中按照执行顺序依次存储。
80.当bios运行过程中发生了宕机,使用硬件调试设备通过地址p获取a区域的数据,查看a区域的最后一条记录,即可找到对应宕机模块的全局唯一标识符和entry地址。
81.bios在编译阶段会为程序的每个模块在相同目录(同一模块在一个目录下)生成.efi文件和.map文件(即映射文件),其中.map中记录了该模块中所有的函数名称及其偏移地址。
82.rip地址(也就是指令地址寄存器的物理地址)减去entry地址(入口物理地址),得到一个偏移地址b,也就是上述的第一偏移地址。
83.将偏移地址b与.map文件中的地址进行比对,即可获取当前宕机的函数名称,例如:两个相邻函数的f1和f2在map文件中的地址分别为m1和m2,如果b》=m1并且b《m2,那么要找的函数就是f1,然后查找所述f1对应的函数的偏移地址,将所述偏移地址输出,即可定位程序的宕机位置。
84.本发明能够在不影响计算机启动时间的情况下,通过内存地址空间记录bios执行流程,能够在不影响计算机启动时间的情况下实现对bios宕机位置的快速定位。
85.本领域普通技术人员可以理解实现上述方法实施例中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)或随机存储记忆体(random access memory,ram)等。
86.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
再多了解一些

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

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

相关文献