CN110737488A - 基于MIPS平台打印嵌入式Linux应用程序backtrace的方法、装置及设备 - Google Patents

基于MIPS平台打印嵌入式Linux应用程序backtrace的方法、装置及设备 Download PDF

Info

Publication number
CN110737488A
CN110737488A CN201910914494.7A CN201910914494A CN110737488A CN 110737488 A CN110737488 A CN 110737488A CN 201910914494 A CN201910914494 A CN 201910914494A CN 110737488 A CN110737488 A CN 110737488A
Authority
CN
China
Prior art keywords
function
address
state information
linux
printing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
CN201910914494.7A
Other languages
English (en)
Inventor
王世芹
谢平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
TP Link Technologies Co Ltd
Original Assignee
TP Link Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by TP Link Technologies Co Ltd filed Critical TP Link Technologies Co Ltd
Priority to CN201910914494.7A priority Critical patent/CN110737488A/zh
Publication of CN110737488A publication Critical patent/CN110737488A/zh
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于MIPS平台打印嵌入式Linux应用程序backtrace的方法和装置以及设备,所述方法包括:当满足预设的应用程序backtrace的打印条件时,获取运行状态信息;对所述运行状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址;将当前获得的函数的返回地址作为上一层调用函数的运行地址并基于当前获得的调用函数的栈地址,解析所述函数的上一层调用函数的返回地址和上上一层调用函数的栈地址,直到解析出每层调用函数的运行地址;根据每层调用函数的运行地址,解析得到每层调用函数的函数名称。采用本发明实施例,能够在保护生产环境下现场信息的前提下,顺利打印出程序backtrace,以便开发人员快速定位问题和解决异常。

Description

基于MIPS平台打印嵌入式Linux应用程序backtrace的方法、 装置及设备
技术领域
本发明涉及计算机应用程序技术领域,特别是涉及一种基于MIPS(Microprocessor without interlocked piped stages architecture,无内部互锁流水级的微处理器)平台打印嵌入式Linux应用程序backtrace的方法、装置及设备。
背景技术
在计算机领域中,基于应用场景、成本、功耗等因素的考虑,嵌入式设备的硬件在硬件接口(比如无法提供JTAG接口等)、硬件资源(CPU运行频率、内存大小、存储Flash大小等)等方面都受到很大的限制。另外在生产环境中,如果嵌入式设备出现异常(比如应用程序崩溃或发生死锁),如何在不破坏现场环境的前提下快速定位出问题的原因也是一个比较大的挑战。
目前有一些比较成熟的开源软件调试工具比如gdb、valgrind、LTTng等可以应用到某些嵌入式软件调试中,但这些软件在内存、Flash资源受限时不能正常使用,也不能在生产环境中不破坏现场的前提下使用。一个简单的方法是直接打印出问题发生时的backtrace,根据backtrace再进一步分析问题原因。在x86、ARM等平台的Linux运行环境,glibc库提供了应用程序backtrace功能。但在MIPS(Microprocessor withoutinterlocked piped stages architecture,无内部互锁流水级的微处理器)平台,Linux内核可以打印出内核线程的backtrace,但不能打印应用程序的backtrace。MIPS平台嵌入式Linux环境中常用的C库uclibc也未提供打印应用程序backtrace的功能。
发明内容
本发明实施例的目的在于提供一种基于MIPS平台打印嵌入式Linux应用程序backtrace的方法,以解决现有Linux应用程序在发生崩溃异常时,无法打印应用程序的backtrace的问题。
本发明一实施例提供了一种基于MIPS平台打印嵌入式Linux应用程序backtrace的方法,包括:
当满足预设的应用程序backtrace的打印条件时,获取运行状态信息;其中,所述运行状态信息包括:发生问题的当前函数在CPU的寄存器中的栈指针、指令指针及返回地址;
对所述运行状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址;
将当前获得的函数的返回地址作为上一层调用函数的运行地址并基于当前获得的调用函数的栈地址,解析所述函数的上一层调用函数的返回地址和上上一层调用函数的栈地址,直到解析出每层调用函数的运行地址;
根据每层调用函数的运行地址,解析得到每层调用函数的函数名称。
可选地,所述打印条件具体包括所述应用程序发生问题。
可选地,在所述当满足预设的应用程序backtrace的打印条件时,获取运行状态信息之前,所述方法还包括:
在加载Linux内核模块时,往Linux内核模块中注册钩子函数;
则,所述对所述运行状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址,包括:
通过所述Linux内核模块将所述运行状态信息传递给所述钩子函数,并通过所述钩子函数对所述运行状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址。
在一个可能的设计当中,在所述当满足预设的应用程序backtrace的打印条件时,获取运行状态信息之前,所述方法还包括:
在加载Linux内核模块时,在/proc目录下创建文件;
则,所述当满足预设的应用程序backtrace的打印条件时,获取运行状态信息,包括:
当满足预设的应用程序backtrace的打印条件时,根据所述文件中用户预先写入的所述应用程序的PID,获取运行状态信息。
可选地,每层调用函数的运行地址的解析是通过所述Linux内核模块来进行的。
在另外一个可能的设计当中,在所述当所述应用程序发生问题时,获取运行状态信息之前,所述方法还包括:
在main函数中调用Linux共享库的使能接口,向Linux系统中注册需要捕获的信号;
则,所述当满足预设的应用程序backtrace的打印条件时,获取运行状态信息,包括:
当满足预设的应用程序backtrace的打印条件时,通过所述Linux共享库捕获到所述信号,并通过所述Linux共享库的信号处理函数从上下文环境中获取所述运行状态信息。
可选地,所述满足预设的应用程序backtrace的打印条件时,获取运行状态信息,包括:
当通过所述Linux共享库捕获到用户输入的backtrace打印指令时,通过所述Linux共享库的信号处理函数从上下文环境中获取所述运行状态信息。
则,所述对所述运行状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址,包括:
根据所述Linux共享库捕获到对应的信号,通过所述Linux共享库的信号处理函数从信号处理上下文环境中获取所述状态信息,并通过对所述状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址。
可选地,每层调用函数的运行地址的解析是通过所述Linux共享库来进行的。
相应地,本发明另一实施例提供了一种基于MIPS平台打印嵌入式Linux应用程序backtrace的装置,包括:
信息获取模块,用于当满足预设的应用程序backtrace的打印条件时,获取运行状态信息;其中,所述运行状态信息包括:发生问题的当前函数在CPU的寄存器中的栈指针、指令指针及返回地址;
解析计算模块,用于对所述运行状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址;
循环执行模块,用于将当前获得的函数的返回地址作为上一层调用函数的运行地址并基于当前获得的调用函数的栈地址,解析所述函数的上一层调用函数的返回地址和上上一层调用函数的栈地址,直到解析出每层调用函数的运行地址;
函数名称解析模块,用于根据每层调用函数的运行地址,解析得到每层调用函数的函数名称。
相应地,本发明另一实施例提供了一种基于MIPS平台打印嵌入式Linux应用程序backtrace的设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现上述任一方案所述的基于MIPS平台打印嵌入式Linux应用程序backtrace的方法。
相比于现有技术,本发明实施例提供的所述基于MIPS平台打印嵌入式Linux应用程序backtrace的方法、装置及设备,通过判断是否满足预设的应用程序backtrace的打印条件,启动所述应用程序backtrace打印程序,既可满足应用程序陷入崩溃时的应用场景,也可满足怀疑某个进程陷入死锁或死循环(正常运行环境),需要打印出指定进程的函数调用关系的应用场景;通过获取运行状态信息,对运行状态信息进行解析,计算得到当前函数的返回地址和上一层函数的栈地址,再把当前函数的返回地址RA作为上一层调用函数的运行地址PC,解析出上一层调用函数的返回地址RA和上上一层调用函数的栈地址SP,以此类推进行解析,直至解析出所有调用函数的运行地址,此种打印嵌入式Linux应用程序backtrace的方法,可以在实际生产环境中保护现场信息的前提下,得到所有函数的调用关系,确保打印出应用程序backtrace,从而分析造成程序崩溃的原因。
附图说明
图1是本发明一实施例提供的基于MIPS平台打印Linux应用程序backtrace方法的流程示意图;
图2是本发明一实施例提供的基于MIPS平台打印Linux应用程序backtrace装置的流程示意图;
图3是本发明一实施例提供的基于MIPS平台打印Linux应用程序backtrace以Linux内核模块形式实现的流程示意图;
图4是本发明一实施例提供的基于MIPS平台打印Linux应用程序backtrace以Linux共享库形式实现的流程示意图;
图5是本发明一实施例提供的基于MIPS平台打印Linux应用程序backtrace设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,是本发明一实施例提供的基于MIPS平台打印Linux应用程序backtrace方法流程示意图。
本实施例提供的基于MIPS平台打印Linux应用程序backtrace方法可以由backtrace打印端执行。其中,在本实施例中,该backtrace打印端优选为运行有MIPS平台的本地计算机(甚至还可以是云端服务器),该backtrace打印端可以通过软件和/或硬件的方式实现,该backtrace打印端可以是两个或多个物理实体构成,也可以是一个物理实体构成。
所述基于MIPS平台打印Linux应用程序backtrace的方法,包括S1至S4,具体如下:
S1,当满足预设的应用程序backtrace的打印条件时,获取运行状态信息;其中,所述满足预设的应用程序backtrace的打印条件,所述运行状态信息,包括:发生问题的当前函数在CPU的寄存器中的栈指针、指令指针及返回地址。
具体地,backtrace打印端通过预设的系统特定信号触发开启相应的服务。其中,所述backtrace打印端通过分析Linux应用程序中当前运行环境,判断是否满足预设的应用程序的打印条件。具体地,所述打印条件包括:当程序发生崩溃时,可以通过backtrace打印端主动打印出所述程序的backtrace,还包括程序正常运行的环境下,用户可以输入预设的指令使得backtrace打印端被动打印指定进程的backtrace,这种方式可以在怀疑某个嵌入式Linux应用程序的进程/线程处于死锁或死循环状态时,用户通过一条命令打印任意应用程序的函数调用关系,用于帮助分析应用程序死锁或死循环的问题。
S2,对所述运行状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址。
具体地,所述对状态信息进行解析,包括:根据当前获取到的MIPS栈结构及MIPS代码段中栈的操作指令,对状态信息进行解析。
S3,将当前获得的函数的返回地址作为上一层调用函数的运行地址并基于当前获得的调用函数的栈地址,解析所述函数的上一层调用函数的返回地址和上上一层调用函数的栈地址,直到解析出每层调用函数的运行地址。
具体地,将返回地址作为新的指令指针继续代码段的操作指令,直到栈为空或达到设置的回溯栈的深度。
S4,根据每层调用函数的运行地址,解析得到每层调用函数的函数名称;
实施本发明实施例,具有如下有益效果:
本发明提供的一种基于MIPS平台打印Linux应用程序backtrace的方法,通过判断是否满足预设的应用程序backtrace的打印条件,启动所述应用程序backtrace打印程序,通过获取运行状态信息,对运行状态信息进行解析,计算得到当前函数的返回地址和上一层函数的栈地址,再把当前函数的返回地址RA作为上一层调用函数的运行地址PC,解析出上一层调用函数的返回地址RA和上上一层调用函数的栈地址SP,以此类推进行解析,直至解析出所有调用函数的运行地址,此种打印嵌入式Linux应用程序backtrace的方法,可以在实际生产环境中保护现场信息的前提下,得到所有函数的调用关系,确保打印出应用程序backtrace,从而分析造成程序崩溃的原因。
可选地,上述步骤S1中,满足预设的应用程序backtrace的打印条件,包括:当函数发生问题时,程序可以自行进行打印和在正常环境下,用户主动输入测试指令触发打印的这两种条件中的至少一种。既可满足应用程序陷入崩溃时的应用场景,也可满足怀疑某个进程陷入死锁或死循环(正常运行环境),需要打印出指定进程的函数调用关系的应用场景即可满足应用程序陷入崩溃时的应用场景,也可满足需要测试应用程序,怀疑某个进程陷入死锁或死循环(正常运行环境)的应用场景;
可选地,上述步骤S1之前,所述方法还可以包括:在加载Linux内核模块时,往Linux内核模块中注册钩子函数;则S2步骤具体实施为:
通过所述Linux内核模块将所述运行状态信息传递给所述钩子函数,并通过所述钩子函数对所述运行状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址。
可选地,上述步骤S1之前,所述方法还可以包括:在加载Linux内核模块时,在/proc目录下创建文件;则S1步骤具体实施为:
当满足预设的应用程序backtrace的打印条件时,根据所述文件中用户预先写入的所述应用程序的PID,获取运行状态信息;其中,所述运行状态信息,包括:发生问题的当前函数在CPU的寄存器中的栈指针、指令指针及返回地址。
需要说明的是,上述实施例的运行地址的解析是通过所述Linux内核模块进行的,当需要以Linux模块进行时,需要通过insmod命令加载该内核模块。该方法以Linux内核模块实现时,不依赖应用程序的符号表或map文件,当以Linux模块实现时可以在需要时加载所述Linux内核模块,对系统资源占用率低,节省目标设备的存储空间。
可选地,终端串口打印出的backtrace可能是指令地址的形式,可以使用PC端的解析工具,根据每层调用函数的运行地址解析出每层调用函数的函数名称。
在另外一个实施例中,在步骤S1前,所述方法还可以包括:在main函数中调用Linux共享库的使能接口,向Linux系统中注册需要捕获的信号;则所述步骤S1,具体实施为:
当满足预设的应用程序backtrace的打印条件时,通过所述Linux共享库捕获到所述信号,并通过所述Linux共享库的信号处理函数从上下文环境中获取所述运行状态信息;其中,所述运行状态信息,包括:发生问题的当前函数在CPU的寄存器中的栈指针、指令指针及返回地址。
则所述步骤S2,具体实施为:
根据所述Linux共享库捕获到对应的信号,通过所述Linux共享库的信号处理函数从信号处理上下文环境中获取所述状态信息,并通过对所述状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址。
需要说明的是,上述实施例的运行地址的解析是通过所述Linux共享库进行的。当以Linux共享库的形式实现时,不需要使用应用程序的符号表或map文件,节省目标设备的存储空间。
参见图2,是本发明一实施例提供的基于MIPS平台打印嵌入式Linux应用程序backtrace的装置的结构示意图,该装置能够实施上述实施例的方法的全部流程,具体包括:
信息获取模块10,用于当满足预设的应用程序backtrace的打印条件时,获取运行状态信息;其中,所述运行状态信息包括:发生问题的当前函数在CPU的寄存器中的栈指针、指令指针及返回地址;
解析计算模块20,用于对所述运行状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址;
循环执行模块30,用于将当前获得的函数的返回地址作为上一层调用函数的运行地址并基于当前获得的调用函数的栈地址,解析所述函数的上一层调用函数的返回地址和上上一层调用函数的栈地址,直到解析出每层调用函数的运行地址;
函数名称解析模块40,用于根据每层调用函数的运行地址,解析得到每层调用函数的函数名称。
可选地,上述满足预设的应用程序backtrace的打印条件,包括当函数发生问题时,程序可以自行进行打印和在正常环境下,用户主动输入测试指令触发打印的两种条件;
可选地,所述装置还可以包括:钩子函数注册模块110,用于在加载Linux内核模块时,往Linux内核模块中注册钩子函数;则解析计算模块20中,具体用于:
通过所述Linux内核模块将所述运行状态信息传递给所述钩子函数,并通过所述钩子函数对所述运行状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址。
可选地,上述信息获取模块10之前,所述装置还可以包括:文件创建模块120,用于在加载Linux内核模块时,在/proc目录下创建文件,则所述信息获取模块10中,具体用于:
当满足预设的应用程序backtrace的打印条件时,根据所述文件中用户预先写入的所述应用程序的PID,获取运行状态信息;其中,所述运行状态信息,包括:发生问题的当前函数在CPU的寄存器中的栈指针、指令指针及返回地址。
需要说明的是,上述实施例的运行地址的解析是通过所述Linux内核模块进行的,当需要以Linux模块进行时,需要通过insmod命令加载该内核模块。该装置以Linux内核模块运行时,不依赖应用程序的符号表或map文件,当以Linux模块实现时可以在需要时加载所述Linux内核模块,对系统资源占用率低,节省目标设备的存储空间。
可选地,终端串口打印出的backtrace可能是指令地址的形式,可以使用PC端的解析工具,根据每层调用函数的运行地址解析出每层调用函数的函数名称。
在另外一个实施例中,在信息获取模块10之前,所述装置还可以包括:信号注册模块130,用于在main函数中调用Linux共享库的使能接口,向Linux系统中注册需要捕获的信号;则所述信息获取模块10中,具体用于:
当满足预设的应用程序backtrace的打印条件时,通过所述Linux共享库捕获到所述信号,并通过所述Linux共享库的信号处理函数从上下文环境中获取所述运行状态信息;其中,所述运行状态信息,包括:发生问题的当前函数在CPU的寄存器中的栈指针、指令指针及返回地址。
则所述解析计算模块20,具体用于:
根据所述Linux共享库捕获到对应的信号,通过所述Linux共享库的信号处理函数从信号处理上下文环境中获取所述状态信息,并通过对所述状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址。
需要说明的是,上述实施例的运行地址的解析是通过所述Linux共享库进行的。当以Linux共享库的形式实现时,不需要使用应用程序的符号表或map文件,节省目标设备的存储空间。
实施本发明实施例,具有如下有益效果:
本发明提供的一种基于MIPS平台打印Linux应用程序backtrace的装置,通过判断是否满足预设的应用程序backtrace的打印条件,启动所述应用程序backtrace打印程序,既可满足应用程序陷入崩溃时的应用场景,也可满足怀疑某个进程陷入死锁或死循环(正常运行环境),需要打印出指定进程的函数调用关系的应用场景;通过获取运行状态信息,对运行状态信息进行解析,计算得到当前函数的返回地址和上一层函数的栈地址,再把当前函数的返回地址RA作为上一层调用函数的运行地址PC,解析出上一层调用函数的返回地址RA和上上一层调用函数的栈地址SP,以此类推进行解析,直至解析出所有调用函数的运行地址,此种打印嵌入式Linux应用程序backtrace的装置,可以在实际生产环境中保护现场信息的前提下,得到所有函数的调用关系,确保打印出应用程序backtrace,从而分析造成程序崩溃的原因。
参见图5,本发明一实施例提供的一种基于MIPS平台打印嵌入式Linux应用程序backtrace设备,其中,包括处理器1、存储器2以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现上述任一实施例所述的基于MIPS平台打印嵌入式Linux应用程序backtrace的方法。
示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器2中,并由所述处理器1执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述基于MIPS平台打印嵌入式Linux应用程序backtrace装置中的执行过程。
所述基于MIPS平台打印嵌入式Linux应用程序backtrace设备可包括,但不仅限于,处理器1、存储器2。本领域技术人员可以理解,所述示意图仅仅是基于MIPS平台打印嵌入式Linux应用程序backtrace设备的示例,并不构成对**装置/终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述基于MIPS平台打印嵌入式Linux应用程序backtrace备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器1可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器1是所述基于MIPS平台打印嵌入式Linux应用程序backtrace设备的控制中心,利用各种接口和线路连接整个基所述于MIPS平台打印嵌入式Linux应用程序backtrace设备的各个部分。
所述存储器2可用于存储所述计算机程序和/或模块,所述处理器1通过运行或执行存储在所述存储器2内的计算机程序和/或模块,以及调用存储在存储器2内的数据,实现所述基于MIPS平台打印嵌入式Linux应用程序backtrace设备的各种功能。所述存储器2可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart MediaCard,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
其中,所述基于MIPS平台打印嵌入式Linux应用程序backtrace设备集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指示相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

Claims (10)

1.一种基于MIPS平台打印嵌入式Linux应用程序backtrace的方法,其特征在于,包括:
当满足预设的应用程序backtrace的打印条件时,获取运行状态信息;其中,所述运行状态信息包括:发生问题的当前函数在CPU的寄存器中的栈指针、指令指针及返回地址;
对所述运行状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址;
将当前获得的函数的返回地址作为上一层调用函数的运行地址并基于当前获得的调用函数的栈地址,解析所述函数的上一层调用函数的返回地址和上上一层调用函数的栈地址,直到解析出每层调用函数的运行地址;
根据每层调用函数的运行地址,解析得到每层调用函数的函数名称。
2.如权利要求1所述的基于MIPS平台打印嵌入式Linux应用程序backtrace的方法,其特征在于,所述打印条件包括所述应用程序发生问题。
3.如权利要求2所述的基于MIPS平台打印嵌入式Linux应用程序backtrace的方法,其特征在于,
在所述当满足预设的应用程序backtrace的打印条件时,获取运行状态信息之前,还包括:
在加载Linux内核模块时,往Linux内核模块中注册钩子函数;
则,所述对所述运行状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址,包括:
通过所述Linux内核模块将所述运行状态信息传递给所述钩子函数,并通过所述钩子函数对所述运行状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址。
4.如权利要求2所述的基于MIPS平台打印嵌入式Linux应用程序backtrace的方法,其特征在于,
在所述当满足预设的应用程序backtrace的打印条件时,获取运行状态信息之前,还包括:
在加载Linux内核模块时,在/proc目录下创建文件;
则,所述当满足预设的应用程序backtrace的打印条件时,获取运行状态信息,包括:
当满足预设的应用程序backtrace的打印条件时,根据所述文件中用户预先写入的所述应用程序的PID,获取运行状态信息。
5.如权利要求3或4所述的基于MIPS平台打印嵌入式Linux应用程序backtrace的方法,其特征在于,每层调用函数的运行地址的解析是通过所述Linux内核模块来进行的。
6.如权利要求2所述的基于MIPS平台打印嵌入式Linux应用程序backtrace的方法,其特征在于:
在所述当所述应用程序发生问题时,获取运行状态信息之前,还包括:
在main函数中调用Linux共享库的使能接口,向Linux系统中注册需要捕获的信号;
则,所述当满足预设的应用程序backtrace的打印条件时,获取运行状态信息,包括:
当满足预设的应用程序backtrace的打印条件时,通过所述Linux共享库捕获到所述信号,并通过所述Linux共享库的信号处理函数从上下文环境中获取所述运行状态信息。
7.如权利要求1所述的基于MIPS平台打印嵌入式Linux应用程序backtrace的方法,其特征在于,
所述满足预设的应用程序backtrace的打印条件时,获取运行状态信息,包括:
当通过所述Linux共享库捕获到用户输入的backtrace打印指令时,通过所述Linux共享库的信号处理函数从上下文环境中获取所述运行状态信息。
8.如权利要求6或7所述的基于MIPS平台打印嵌入式Linux应用程序backtrace的方法,其特征在于,每层调用函数的运行地址的解析是通过所述Linux共享库来进行的。
9.一种基于MIPS平台打印嵌入式Linux应用程序backtrace的装置,其特征在于,包括:
信息获取模块,用于当满足预设的应用程序backtrace的打印条件时,获取运行状态信息;其中,所述运行状态信息包括:发生问题的当前函数在CPU的寄存器中的栈指针、指令指针及返回地址;
解析计算模块,用于对所述运行状态信息进行解析,计算得到当前函数的返回地址和所述当前函数的上一层调用函数的栈地址;
运行地址解析模块,用于将当前获得的函数的返回地址作为上一层调用函数的运行地址并基于当前获得的调用函数的栈地址,解析所述函数的上一层调用函数的返回地址和上上一层调用函数的栈地址,直到解析出每层调用函数的运行地址;
函数名称解析模块,用于根据每层调用函数的运行地址,解析得到每层调用函数的函数名称。
10.一种基于MIPS平台打印嵌入式Linux应用程序backtrace的设备,其特征在于,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至8中任意一项所述的基于MIPS平台打印嵌入式Linux应用程序backtrace的方法。
CN201910914494.7A 2019-09-24 2019-09-24 基于MIPS平台打印嵌入式Linux应用程序backtrace的方法、装置及设备 Withdrawn CN110737488A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910914494.7A CN110737488A (zh) 2019-09-24 2019-09-24 基于MIPS平台打印嵌入式Linux应用程序backtrace的方法、装置及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910914494.7A CN110737488A (zh) 2019-09-24 2019-09-24 基于MIPS平台打印嵌入式Linux应用程序backtrace的方法、装置及设备

Publications (1)

Publication Number Publication Date
CN110737488A true CN110737488A (zh) 2020-01-31

Family

ID=69269645

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910914494.7A Withdrawn CN110737488A (zh) 2019-09-24 2019-09-24 基于MIPS平台打印嵌入式Linux应用程序backtrace的方法、装置及设备

Country Status (1)

Country Link
CN (1) CN110737488A (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101122881A (zh) * 2007-09-20 2008-02-13 福建星网锐捷网络有限公司 一种基于mips架构cpu的异常点定位诊断方法
CN101539883A (zh) * 2009-05-05 2009-09-23 北京和利时系统工程有限公司 嵌入式系统的错误追踪方法和装置
US7870541B1 (en) * 2004-11-01 2011-01-11 Wind River Systems, Inc. Context tracing for software with a frame pointer and a stack pointer and with a stack pointer but without a frame pointer
CN103019707A (zh) * 2012-11-30 2013-04-03 华为技术有限公司 调用栈的解析处理方法及装置
CN107085548A (zh) * 2016-02-16 2017-08-22 阿里巴巴集团控股有限公司 一种监控应用程序内存的方法、装置及电子设备
CN109788352A (zh) * 2018-12-25 2019-05-21 深圳市纽格力科技有限公司 一种基于mips架构的机顶盒异常确认方法和系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7870541B1 (en) * 2004-11-01 2011-01-11 Wind River Systems, Inc. Context tracing for software with a frame pointer and a stack pointer and with a stack pointer but without a frame pointer
CN101122881A (zh) * 2007-09-20 2008-02-13 福建星网锐捷网络有限公司 一种基于mips架构cpu的异常点定位诊断方法
CN101539883A (zh) * 2009-05-05 2009-09-23 北京和利时系统工程有限公司 嵌入式系统的错误追踪方法和装置
CN103019707A (zh) * 2012-11-30 2013-04-03 华为技术有限公司 调用栈的解析处理方法及装置
CN107085548A (zh) * 2016-02-16 2017-08-22 阿里巴巴集团控股有限公司 一种监控应用程序内存的方法、装置及电子设备
CN109788352A (zh) * 2018-12-25 2019-05-21 深圳市纽格力科技有限公司 一种基于mips架构的机顶盒异常确认方法和系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
夏东盛: "MIPS 系统异常现场分析工具的设计与实现", 《电子设计工程》, pages 1 - 3 *

Similar Documents

Publication Publication Date Title
WO2019161619A1 (zh) 接口自动化测试方法、装置、设备及计算机可读存储介质
CN108459962B (zh) 代码规范性检测方法、装置、终端设备及存储介质
US20160300044A1 (en) Anti-debugging method
CN102736978A (zh) 一种检测应用程序的安装状态的方法及装置
CN103577310A (zh) 记录软件调试日志的方法以及装置
CN110737594A (zh) 自动生成测试用例的数据库标准符合性测试方法及装置
CN110659210A (zh) 一种信息获取方法、装置、电子设备及存储介质
CN111177113A (zh) 数据迁移方法、装置、计算机设备和存储介质
WO2019148657A1 (zh) 关联环境测试方法、电子装置及计算机可读存储介质
CN109032685B (zh) 一种加速安卓系统启动的方法及终端
CN115686961A (zh) 处理器测试方法、装置及电子设备
CN110597704A (zh) 应用程序的压力测试方法、装置、服务器和介质
CN109840212B (zh) 应用程序的功能测试方法、装置、设备及可读存储介质
CN114386045A (zh) 一种Web应用程序漏洞检测方法、装置及存储介质
CN111200744A (zh) 一种多媒体播放控制方法、装置及智能设备
CN108959070B (zh) 一种基于代码对象的Python钩子函数方法和装置
CN108132799B (zh) 过程间静态程序分析信息提取方法、装置及设备
CN115794690A (zh) 一种基于服务器中外接设备的处理方法及装置
CN110737488A (zh) 基于MIPS平台打印嵌入式Linux应用程序backtrace的方法、装置及设备
CN115712559A (zh) 测试硬件管理软件的方法、装置及电子设备
CN114968753A (zh) 设备升级测试方法、介质、电子设备及测试系统
CN114265786A (zh) 自动化测试方法、装置,计算机设备及可读存储介质
CN110096888B (zh) 一种加快验证及分析smm安全隐患的方法及系统
US10922249B2 (en) Input/output control code filter
CN109388564B (zh) 一种测试方法、装置及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WW01 Invention patent application withdrawn after publication
WW01 Invention patent application withdrawn after publication

Application publication date: 20200131