CN100570581C - 故障定位的方法和装置 - Google Patents
故障定位的方法和装置 Download PDFInfo
- Publication number
- CN100570581C CN100570581C CNB2008100899125A CN200810089912A CN100570581C CN 100570581 C CN100570581 C CN 100570581C CN B2008100899125 A CNB2008100899125 A CN B2008100899125A CN 200810089912 A CN200810089912 A CN 200810089912A CN 100570581 C CN100570581 C CN 100570581C
- Authority
- CN
- China
- Prior art keywords
- function
- storehouse
- current
- function storehouse
- address
- 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.)
- Active
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种故障定位的方法,该方法包括:在由于函数调用异常导致进程出现异常的情况下,在程序空间中获取异常进程的程序指针的值和堆栈指针的值;根据获取的程序指针的值和堆栈指针的值获取堆栈指针指向的当前函数堆栈的大小以及当前函数堆栈的栈帧中所存储的返回指令;根据当前函数堆栈的大小和堆栈指针的值获取当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令;查找异常进程的可执行文件,并根据查找的可执行文件查找异常进程的符号表,根据在当前栈帧和其它栈帧中获取的返回指令在符号表中查找相应的函数。此外,本发明还公开了一种故障定位的装置。
Description
技术领域
本发明涉及无内部互锁流水级的微处理器领域,并且特别地,涉及一种对无内部互锁流水级的微处理器的堆栈进行故障定位的方法和装置。
背景技术
无内部互锁流水级的微处理器(MIPS)作为三大RISC CPU(powerpc、arm、以及mips)之一,在嵌入式设备上得到广泛应用,越来越多的嵌入式程序运行于MIPS CPU之上。当应用程序因为空指针、错误指针、溢出等错误导致异常崩溃时,打印出的可供参考的信息寥寥无几。操作系统的异常处理程序里通常只是打印当前CPU的所有寄存器的值以及异常进程异常时用户空间程序指针(pc),堆栈指针(sp)的值等。
通常的定位故障的办法是先反汇编异常进程可执行文件,然后根据异常时打印的pc值去反汇编代码中查找异常发生所在的函数,然而,这种方法有存在以下问题:
第一,这种做法非常的繁琐,并且不够不直观,需要反汇编代码、查找。并且对开发人员有较高要求,很多上层业务开发人员并不熟悉这种反汇编定位故障的方法。
第二,不能解决所有问题。第一种情况是如果当前异常函数被很多函数调用,即使找到了异常函数,依然无法定位是上面哪个函数调用了以及哪个流程出了问题,实际上,定位故障是定位一条函数执行流程。第二种种情况是异常有时发生在库函数里(比如调用库函数的函数传给库函数参数错误),异常记录的pc值为库函数地址,在反汇编用户进程里是无法找到与此pc值对应的地址的。
目前,在现有技术中,尚未提出能够解决以上所述两个问题的技术方案。
发明内容
考虑到上述问题而做出本发明,为此,本发明的主要目的在于提供一种故障定位的方法和装置,以解决相关技术中故障定位繁琐、定位结果不直观、以及故障定位不准确的问题。
根据本发明的一个实施例,提供了一种故障定位方法,用于对无内部互锁流水级的微处理器的堆栈进行故障定位。
该方法包括:在由于函数调用异常导致进程出现异常的情况下,在程序空间中获取异常进程的程序指针的值和堆栈指针的值;根据获取的异常进程的程序指针的值和堆栈指针的值获取堆栈指针指向的当前函数堆栈的大小以及当前函数堆栈的栈帧中所存储的返回指令;根据当前函数堆栈的大小和堆栈指针的值获取当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令;查找异常进程的可执行文件,并根据查找的可执行文件查找异常进程的符号表,根据在当前栈帧和其它栈帧中获取的返回指令在符号表中查找相应的函数。
此外,获取当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令的处理具体为:确定当前堆栈指针的值;获取当前函数堆栈中存储的返回地址;确定当前函数堆栈的大小;将确定的当前堆栈指针的值和函数堆栈的大小相加,将相加的结果作为当前函数堆栈的下一个函数堆栈的栈帧地址,并将下一个函数堆栈作为当前函数堆栈。
其中,在每次获取了一个函数堆栈的栈帧中存储的函数的返回指令后,进一步包括:判断获取的返回指令所对应的函数是否在调用异常的函数体内,如果判断为是,则继续查找下个函数堆栈;否则停止查找函数堆栈。进行判断的处理具体为:获取当前获取的函数堆栈的地址,并从程序空间获取该函数堆栈的大小,并根据当前获取的函数堆栈的地址和大小判断其是否在调用异常的函数体范围内。
其中,根据获取的返回指令在符号表中查找相应的函数的处理具体为:将符号表中小于并且最接近于返回地址的函数地址作为对应于该返回地址的函数地址,并根据函数地址找到相应函数。
根据本发明的另一实施例,提供了一种故障定位装置,用于对无内部互锁流水级的微处理器的堆栈进行故障定位。
该装置包括:第一获取模块,用于在由于函数调用异常导致进程出现异常的情况下,在程序空间中获取异常进程的程序指针的值和堆栈指针的值;第二获取模块,用于根据获取的异常进程的程序指针的值和堆栈指针的值获取堆栈指针指向的当前函数堆栈的大小以及当前函数堆栈的栈帧中所存储的返回指令;以及根据当前函数堆栈的大小和堆栈指针的值获取当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令;查找模块,用于查找异常进程的可执行文件,并根据查找的可执行文件查找异常进程的符号表,根据在当前栈帧和其它栈帧中获取的返回指令在符号表中查找相应的函数。
其中,第二获取模块获取当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令的处理具体为:确定当前堆栈指针的值;获取当前函数堆栈中存储的返回地址;确定当前函数堆栈的大小;将确定的当前堆栈指针的值和函数堆栈的大小相加,将相加的结果作为当前函数堆栈的下一个函数堆栈的栈帧地址,并将下一个函数堆栈作为当前函数堆栈。此外,该装置进一步包括:判断模块,用于在每次获取了一个函数堆栈的栈帧中存储的函数的返回指令后,判断获取的返回指令所对应的函数是否在调用异常的函数体内,如果判断为是,则继续查找下个函数堆栈;否则停止查找函数堆栈。判断模块进行的判断处理具体为:获取当前获取的函数堆栈的地址,并从程序空间获取该函数堆栈的大小,并根据当前获取的函数堆栈的地址和大小判断其是否在函数体范围内。此外,查找模块根据获取的返回指令在符号表中查找相应的函数时所执行的处理具体为:将符号表中小于并且最接近于返回地址的函数地址作为对应于该返回地址的函数地址,并根据函数地址找到相应函数。
综上所述,借助于本发明的技术方案,能够有效实现自动化的故障定位,大大提高了调试和故障定位的效率,简化了故障定位的操作,并且使故障定位的操作结果更加直观。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明方法实施例的故障定位方法的流程图;
图2是根据相关技术的mips栈帧结构图;以及
图3是根据本发明装置实施例的故障定位装置的框图。
具体实施方式
方法实施例
在本实施例中,提供了一种故障定位方法,用于对无内部互锁流水级的微处理器的堆栈进行故障定位。
图1是故障定位方法的流程图,如图1所示,该方法包括:
步骤S102,在由于函数调用异常导致进程出现异常的情况下,在程序空间中获取异常进程的程序指针的值和堆栈指针的值;步骤S104,根据获取的程序指针的值和堆栈指针的值获取堆栈指针指向的当前函数堆栈的大小以及当前函数堆栈的栈帧中所存储的返回指令;步骤S106,根据当前函数堆栈的大小和堆栈指针的值获取当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令;步骤S108,查找异常进程的可执行文件,并根据查找的可执行文件查找异常进程的符号表,根据在当前栈帧和其它栈帧中获取的返回指令在符号表中查找相应的函数。
也就是说,定位一条函数执行流程可以通过堆栈回溯的方法,每个函数执行时有一个栈帧,栈帧里保存有每个函数的返回地址,在异常时将堆栈帧里存储的各个函数地址回溯可以精确复现函数执行调用关系,就可以解决在反汇编用户进程里是无法找到与此pc值对应的地址的问题。
但是,问题的关键是确定每个栈帧的大小及每个函数返回地址保存于栈帧中的位置,仅仅通过堆栈和异常现场的mips的32个寄存器是无法实现的。
此外,获取当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令的处理具体为:确定当前堆栈指针的值;获取当前函数堆栈中存储的返回地址;确定当前函数堆栈的大小;将确定的值和大小相加,将相加的结果作为当前函数堆栈的下一个函数堆栈的栈帧地址,并将下一个函数堆栈作为当前函数堆栈。
其中,在每次获取了一个函数堆栈的栈帧中存储的函数的返回指令后,进一步包括:判断获取的返回指令所对应的函数是否在调用异常的函数体内,如果判断为是,则继续查找下个函数堆栈;否则停止查找函数堆栈。进行判断的处理具体为:获取当前获取的函数堆栈的地址,并从程序空间获取该函数堆栈的大小,并根据当前获取的函数堆栈的地址和大小判断其是否在函数体范围内。
当进程发生异常时,操作系统会保护进程用户空间现场进入异常处理程序。根据异常时进程PC和SP值在此进程程序空间.text区搜索MIPS关键二进制指令,以获得当前函数堆栈大小及返回指令存储于此栈帧位置,gcc编译mips代码时有固有的特点,某些指令包含了函数开始初分配栈帧空间的大小,某些指令指出了函数返回地址保存寄存器ra保存于栈帧里的相对位置。搜索到这些特定指令即可以获得当前函数堆栈大小及ra保存于栈帧中位置。
将sp加上当前函数堆栈大小即获得下一栈帧的sp,从栈帧中取出ra或直接从ra中可获得返回指令地址,返回指令地址即位于调用此异常函数的母函数体内,反复重复上一过程,即获得了导致此异常的函数流程里的所有函数返回地址。
此外,根据获取的返回指令在符号表中查找相应的函数的处理具体为:将符号表中小于并且最接近于返回地址的函数地址作为对应于该返回地址的函数地址,并根据函数地址找到相应函数。
至此,如果只是简单的将各个函数返回地址打印出来,对开发人员仍然不方便,依然存在繁琐和不直观的问题,而对照符号表就可以将函数返回地址对应的函数名查找出来,这样通过将各个函数名打印出来就可以对出现故障的流程里的各个函数一目了然。
具体地,可以找到此进程存放在文件系统里的可执行文件,打开,按照可执行文件格式找到符号表,通过函数地址查找符号表找到函数名。前面获得的是函数返回地址,并非函数起始地址,而函数符号对应的是函数起始地址,可以采用如下算法:在符号表里,搜索比返回地址值小并且两者间距最小的符号地址即为函数符号。
图2是根据相关技术的mips栈帧的结构示意图。下面,将结合图2描述根据本实施例的对MIPS堆栈回溯定位故障的方法。
Leaf函数是指内部没有调用其他函数的函数。函数调用leaf函数时返回地址保存于ra中,在leaf函数里因为无需再调用其他函数,所以通常ra无需压栈,可以直接从ra中获得返回地址。Leaf函数是否需要建立堆栈是依据具体函数的,mips的gcc编译器在函数入口一次性的为此函数分配堆栈大小。如图2所示,堆栈大小包括三部分:为函数内临时变量分配空间、一些内部寄存器保存、为内部被调用函数建立参数的空间。mips有32个内部寄存器,内部寄存器可以做为临时变量,做被调用函数输入参数等,前提是这些寄存器器够用,所以并非每个函数编译器都会为其建立堆栈。
Nonleaf函数为内部调用了其他函数的函数,nonleaf函数通常在函数入口处要建立堆栈,因为至少ra需要保存于堆栈中。
建立堆栈的做法是编译器计算出要为此函数分配的堆栈大小,然后一次性设定,在函数入口处将sp减去此堆栈大小,然后所有在堆栈中的数据都通过sp加上固定的偏移量来获取,在函数出口处将sp加上堆栈大小恢复前一堆栈值。
Mips指令为32bit长,里面包含操作码(opcode),操作寄存器,操作数等,每条指令都有其固定编码格式,将32bit的指令与特定掩码相与提取出操作数,操作寄存器等,则可以确定此指令。下面的搜索指令均采用此方法。
根据pc值在用户进程程序空间中往前搜索:
如果搜索到sw ra,x(sp),这条指令指出ra保存于堆栈sp+x处,从指令提取出偏移量x,而一个函数的sp是固定指向此函数堆栈顶的,所以从堆栈sp+x处可以取处保存的ra值,而ra里存放的是此函数的返回地址。
如果没有搜索到sw ra,x(sp),则表明此函数没有保存ra于堆栈里,则ra里存放的就是返回地址,从寄存器器ra里直接可以获得函数返回地址。
如果搜索到addiu sp,sp,+-offset指令,这条指令通常位于函数入口最开始处由编译器用来为此函数分配堆栈大小,在函数返回之前由编译器回收堆栈。异常通常发生在用户代码里,而我们是根据pc往前搜索,所以搜索到的应该是addiu sp,sp,-offset,从此指令中提取立即数offset,此即为此函数栈帧大小。如果没有搜索到此指令,表示此函数没有分配堆栈,则下一函数堆栈指针依然为此sp值。
直到搜索到另一个函数体内肯定是错误的为止,有两个结束条件:一个是搜索到addiu sp,sp,-offset指令。一个是搜索到jr ra指令,jr ra是每个函数的返回指令,如果搜索到此指令表示已搜索脱离了本函数,进入此函数相邻的函数里了,则此时搜索应该结束。
上述操作的输入是:当前函数体内的一个pc值;当前函数的堆栈起始地址sp。输出是:调用此函数的返回地址,此返回地址位于调用函数的地址范围内;当前函数堆栈大小,加上当前堆栈起始地址,即,获得调用函数的堆栈起始地址。将输出再次作为输入,重复上述过程就可以获得一个完整的调用链里所有函数体内的一个地址值。
进程在内核的进程控制块里保存有进程的用户空间堆栈开始地址;用户空间程序开始及结束地址,上述循环搜索始终判断获得函数堆栈地址,函数地址是否在范围之类,如果不在,循环搜索结束。
可执行文件格式很多,本实施例以ELF格式为例进行说明。找到此进程在文件系统里的elf文件,打开,按照elf文件格式,提取出4个section:.dynsym、.symtab、.dynstr、.strtab、.dynsym,其中,.symtab为符号表,.dynstr和.strtab为符号对应字符串。
其中,符号表里每个符号对应的数据结构为:
typedef struct
{
Elf32_Word st_name;/*符号名索引号*/
Elf32_Addr st_value;/*符号地址值*/
Elf32_Word st_size;/*符号对应的代码长度*/
unsigned char st_info;/*符号类型和梆定信息*/
unsigned char st_other;/*未用,值为0*/
Elf32_Section st_shndx;/*所在节的节索引号*/
}Elf32_Sym;
前面搜索出的是一条返回地址链,并非每个函数的初始地址,返回地址位于每个函数地址范围内,可以采用如下算法计算处函数初始地址:在符号表里,搜索比返回地址值小并且两者间距最小的符号地址(即st_value)即为函数初始地址,它对应的st_name为符号名索引号,通过此索引号到.dynstr节或.strtab节即可以获得每个函数的符号名。
将每个函数的符号名逐一打印出来就可以看到异常发生时整个调用关系里的所有函数名,定位故障位置直观、方遍、并且迅速。
装置实施例
在本实施例中,提供了一种故障定位装置,用于对无内部互锁流水级的微处理器的堆栈进行故障定位。
图3为这种故障定位装置的流程图,如图3所示,该装置包括:
第一获取模块302,用于在由于函数调用异常导致进程出现异常的情况下,在程序空间中获取异常进程的程序指针的值和堆栈指针的值;第二获取模块304,用于根据获取的程序指针的值和堆栈指针的值获取堆栈指针指向的当前函数堆栈的大小以及当前函数堆栈的栈帧中所存储的返回指令;以及根据当前函数堆栈的大小和堆栈指针的值获取当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令;查找模块306,用于查找异常进程的可执行文件,并根据查找的可执行文件查找异常进程的符号表,根据在当前栈帧和其它栈帧中获取的返回指令在符号表中查找相应的函数。
其中,第二获取模块304获取当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令的处理具体为:确定当前堆栈指针的值;获取当前函数堆栈中存储的返回地址;确定当前函数堆栈的大小;将确定的值和大小相加,将相加的结果作为当前函数堆栈的下一个函数堆栈的栈帧地址,并将下一个函数堆栈作为当前函数堆栈。
该装置还包括:判断模块,用于在每次获取了一个函数堆栈的栈帧中存储的函数的返回指令后,判断获取的返回指令所对应的函数是否在调用异常的函数体内,如果判断为是,则继续查找下个函数堆栈;否则停止查找函数堆栈。判断模块进行的判断处理具体为:获取当前获取的函数堆栈的地址,并从程序空间获取该函数堆栈的大小,并根据当前获取的函数堆栈的地址和大小判断其是否在函数体范围内。
此外,查找模块306根据获取的返回指令在符号表中查找相应的函数时所执行的处理具体为:将符号表中小于并且最接近于返回地址的函数地址作为对应于该返回地址的函数地址,并根据函数地址找到相应函数。
综上所述,本发明能够通过堆栈回溯的方法,从可执行文件里直接提取出符号表查找以找到函数名。借助于本发明的技术方案,能够有效实现自动化的故障定位,大大提高了调试和故障定位的效率,简化了故障定位的操作,并且使故障定位的操作结果更加直观。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种故障定位方法,用于对无内部互锁流水级的微处理器的堆栈进行故障定位,其特征在于,所述方法包括:
在由于函数调用异常导致进程出现异常的情况下,在程序空间中获取异常进程的程序指针的值和堆栈指针的值;
根据获取的所述异常进程的程序指针的值和所述堆栈指针的值获取所述堆栈指针指向的当前函数堆栈的大小以及所述当前函数堆栈的栈帧中所存储的返回指令;
根据所述当前函数堆栈的大小和所述堆栈指针的值获取所述当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令;
查找所述异常进程的可执行文件,并根据查找的所述可执行文件查找所述异常进程的符号表,根据在当前栈帧和其它栈帧中获取的所述返回指令在所述符号表中查找相应的函数。
2.根据权利要求1所述的方法,其特征在于,获取所述当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令的处理具体为:
确定当前堆栈指针的值;
获取所述当前函数堆栈中存储的返回地址;
确定当前函数堆栈的大小;
将确定的所述当前堆栈指针的值和所述函数堆栈的大小相加,将相加的结果作为所述当前函数堆栈的下一个函数堆栈的栈帧地址,并将所述下一个函数堆栈作为所述当前函数堆栈。
3.根据权利要求2所述的方法,其特征在于,在每次获取了一个函数堆栈的栈帧中存储的函数的返回指令后,进一步包括:
判断获取的所述返回指令所对应的函数是否在调用异常的函数体内,如果判断为是,则继续查找下个函数堆栈;否则停止查找函数堆栈。
4.根据权利要求3所述的方法,其特征在于,进行所述判断的处理具体为:
获取当前获取的所述函数堆栈的地址,并从所述程序空间获取该函数堆栈的大小,并根据所述当前获取的所述函数堆栈的地址和大小判断其是否在所述调用异常的函数体范围内。
5.根据权利要求1至4中任一项所述的方法,其特征在于,根据获取的所述返回指令在所述符号表中查找相应的函数的处理具体为:
将所述符号表中小于并且最接近于所述返回地址的函数地址作为对应于该返回地址的函数地址,并根据所述函数地址找到相应函数。
6.一种故障定位装置,用于对无内部互锁流水级的微处理器的堆栈进行故障定位,其特征在于,所述装置包括:
第一获取模块,用于在由于函数调用异常导致进程出现异常的情况下,在程序空间中获取异常进程的程序指针的值和堆栈指针的值;
第二获取模块,用于根据获取的所述异常进程的程序指针的值和所述堆栈指针的值获取所述堆栈指针指向的当前函数堆栈的大小以及所述当前函数堆栈的栈帧中所存储的返回指令;以及根据所述当前函数堆栈的大小和所述堆栈指针的值获取所述当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令;
查找模块,用于查找所述异常进程的可执行文件,并根据查找的所述可执行文件查找所述异常进程的符号表,根据在当前栈帧和其它栈帧中获取的所述返回指令在所述符号表中查找相应的函数。
7.根据权利要求6所述的装置,其特征在于,所述第二获取模块获取所述当前函数堆栈之后的函数堆栈的栈帧中存储的函数的返回指令的处理具体为:
确定当前堆栈指针的值;
获取所述当前函数堆栈中存储的返回地址;
确定当前函数堆栈的大小;
将确定的所述当前堆栈指针的值和所述函数堆栈的大小相加,将相加的结果作为所述当前函数堆栈的下一个函数堆栈的栈帧地址,并将所述下一个函数堆栈作为所述当前函数堆栈。
8.根据权利要求7所述的装置,其特征在于,进一步包括:
判断模块,用于在每次获取了一个函数堆栈的栈帧中存储的函数的返回指令后,判断获取的所述返回指令所对应的函数是否在调用异常的函数体内,如果判断为是,则继续查找下个函数堆栈;否则停止查找函数堆栈。
9.根据权利要求8所述的装置,其特征在于,所述判断模块进行的判断处理具体为:
获取当前获取的所述函数堆栈的地址,并从所述程序空间获取该函数堆栈的大小,并根据所述当前获取的所述函数堆栈的地址和大小判断其是否在所述函数体范围内。
10.根据权利要求6至9中任一项所述的装置,其特征在于,所述查找模块根据获取的所述返回指令在所述符号表中查找相应的函数时所执行的处理具体为:
将所述符号表中小于并且最接近于所述返回地址的函数地址作为对应于该返回地址的函数地址,并根据所述函数地址找到相应函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2008100899125A CN100570581C (zh) | 2008-04-09 | 2008-04-09 | 故障定位的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2008100899125A CN100570581C (zh) | 2008-04-09 | 2008-04-09 | 故障定位的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101261603A CN101261603A (zh) | 2008-09-10 |
CN100570581C true CN100570581C (zh) | 2009-12-16 |
Family
ID=39962069
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2008100899125A Active CN100570581C (zh) | 2008-04-09 | 2008-04-09 | 故障定位的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100570581C (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063344A (zh) * | 2009-11-18 | 2011-05-18 | 中兴通讯股份有限公司 | 一种系统故障信息转储的方法与系统 |
CN103019707B (zh) * | 2012-11-30 | 2016-01-27 | 华为技术有限公司 | 调用栈的解析处理方法及装置 |
CN103019787B (zh) * | 2012-12-14 | 2016-08-10 | 华为技术有限公司 | 函数调用关系确定方法、热补丁升级方法及装置 |
CN103678127B (zh) * | 2013-12-16 | 2016-10-05 | 中国电子科技集团公司第四十一研究所 | 一种嵌入式仪器软件的故障定位及分析方法 |
CN105224346B (zh) * | 2014-05-28 | 2019-11-29 | 腾讯科技(深圳)有限公司 | 目标函数定位方法及装置 |
CN105824749B (zh) * | 2016-03-09 | 2019-06-25 | 上海博达数据通信有限公司 | 一种linux系统下用户态进程异常的分析方法 |
US11327797B2 (en) | 2016-05-09 | 2022-05-10 | Oracle International Corporation | Memory usage determination techniques |
CN107515769B (zh) * | 2016-06-16 | 2022-07-05 | 中兴通讯股份有限公司 | 一种变量信息提取方法及装置 |
CN106294175A (zh) * | 2016-08-19 | 2017-01-04 | 浪潮(北京)电子信息产业有限公司 | 一种程序执行行为可视化方法及系统 |
CN107704356B (zh) | 2017-06-12 | 2019-06-28 | 平安科技(深圳)有限公司 | 异常堆栈信息获取方法、装置及计算机可读存储介质 |
KR102467842B1 (ko) * | 2017-10-13 | 2022-11-16 | 삼성전자주식회사 | 인스트럭션을 실행하는 코어 및 그것을 포함하는 시스템 |
CN110874279B (zh) * | 2018-08-29 | 2023-05-30 | 阿里巴巴集团控股有限公司 | 故障定位方法、装置和系统 |
CN109788352A (zh) * | 2018-12-25 | 2019-05-21 | 深圳市纽格力科技有限公司 | 一种基于mips架构的机顶盒异常确认方法和系统 |
CN111367588B (zh) * | 2018-12-25 | 2023-05-16 | 杭州海康威视数字技术股份有限公司 | 一种获取堆栈使用量的方法及装置 |
CN111352842A (zh) * | 2020-02-28 | 2020-06-30 | 成都金诺信高科技有限公司 | 基于嵌入式的软件调试方法 |
CN113342431B (zh) * | 2021-06-29 | 2023-02-07 | 苏州科达科技股份有限公司 | 函数调用栈回溯、程序异常处理方法、装置、设备及介质 |
CN113672449A (zh) * | 2021-07-07 | 2021-11-19 | 浙江大华技术股份有限公司 | 智能运维异常监测方法、装置、计算机设备和存储介质 |
CN115705294B (zh) * | 2021-08-12 | 2024-07-05 | 华为技术有限公司 | 用于获取函数调用信息的方法、装置、电子设备和介质 |
CN115982057B (zh) * | 2023-03-02 | 2023-06-09 | 杭州协能科技股份有限公司 | 程序指针故障检测方法 |
-
2008
- 2008-04-09 CN CNB2008100899125A patent/CN100570581C/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN101261603A (zh) | 2008-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100570581C (zh) | 故障定位的方法和装置 | |
Parr et al. | LL (*) the foundation of the ANTLR parser generator | |
US9602347B2 (en) | Method, system and program for browser to switch IE kernel | |
CN100511177C (zh) | 一种嵌入式系统的符号定位方法 | |
US20160357519A1 (en) | Natural Language Engine for Coding and Debugging | |
CN103019787B (zh) | 函数调用关系确定方法、热补丁升级方法及装置 | |
US8694760B2 (en) | Branch prediction using a leading value of a call stack storing function arguments | |
CN103488463A (zh) | 通过循环结束分支来抑制分支历史寄存器的更新 | |
SE520072C2 (sv) | Metod och system för exceptionshantering | |
CN104714882B (zh) | 代码信息处理的方法及装置 | |
CN107015904B (zh) | 堆栈的保护方法及装置 | |
CN102880493B (zh) | 一种构件间动态依赖关系的自动分析方法 | |
Zhu et al. | Determining image base of firmware files for ARM devices | |
KR930703642A (ko) | 순서를 벗어난 작업 처리방법 및 장치 | |
CN102077195A (zh) | 具有紧凑指令集架构的微处理器 | |
CN111459495A (zh) | 单元测试代码文件生成方法、电子装置及存储介质 | |
CN109214149B (zh) | 一种mips固件基地址自动化检测方法 | |
CN109375921A (zh) | 页面文件快速编译方法、装置及存储设备、计算机设备 | |
CN116167058A (zh) | 一种基于代码疫苗的运行时漏洞分析方法及装置 | |
CN103077062A (zh) | 一种代码改动的检测方法和装置 | |
CN107797996B (zh) | 一种词条翻译方法及装置 | |
CN101251799A (zh) | 管理实现的方法和装置 | |
CN113760246B (zh) | 应用程序文本语言处理方法、装置、电子设备及存储介质 | |
WO1998034170A1 (en) | Method and apparatus for allowing continued operation for overflow and invalid data | |
CN102799528B (zh) | 一种用于电路板级测试的脚本调试方法、装置及其系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |