CN110618940A - 堆栈信息追踪方法、装置、计算机可读介质及计算装置 - Google Patents

堆栈信息追踪方法、装置、计算机可读介质及计算装置 Download PDF

Info

Publication number
CN110618940A
CN110618940A CN201910885640.8A CN201910885640A CN110618940A CN 110618940 A CN110618940 A CN 110618940A CN 201910885640 A CN201910885640 A CN 201910885640A CN 110618940 A CN110618940 A CN 110618940A
Authority
CN
China
Prior art keywords
stack
stack information
information
stacks
determining
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.)
Granted
Application number
CN201910885640.8A
Other languages
English (en)
Other versions
CN110618940B (zh
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201910885640.8A priority Critical patent/CN110618940B/zh
Publication of CN110618940A publication Critical patent/CN110618940A/zh
Application granted granted Critical
Publication of CN110618940B publication Critical patent/CN110618940B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请公开了堆栈信息追踪方法、装置、计算机可读介质及计算装置,涉及堆栈追踪领域,用以解决相关技术中当系统出现问题时,只能获取当前运行堆栈的信息,无法获取之前调用的堆栈信息,导致的漏洞定位不准确的问题。该方法中,在指定应用运行期间,从运行所述指定应用的操作系统的栈内存空间中获取多条栈信息;根据栈信息的来源确定属于同一堆栈的栈信息,并根据属于同一堆栈的栈信息的各自进栈时序标识和出栈时序标识,确定同一堆栈的开始栈信息和结束栈信息;基于不同堆栈的开始栈信息和结束栈信息进行堆栈关联关系分析,确定出不同堆栈之间的关联关系。这样,通过生成按照其中任两个堆栈的因果关系排序得到的栈链,让开发者更好的定位漏洞。

Description

堆栈信息追踪方法、装置、计算机可读介质及计算装置
技术领域
本申请涉及堆栈追踪领域,尤其涉及一种堆栈信息追踪方法、装置、计算机可读介质及计算装置。
背景技术
开发者在进行程序开发时,难免会出现问题,但出现问题时如何定位漏洞bug是业界比较关注的问题。
相关技术中,对于线程栈的追踪技术大致包括以下两种方式:
方式1、对当前运行栈进行分析,得到当前运行栈的分析结果;
方式2、通过日志来记录的程序运行状态,进而通过分析日志。
然而,相关技术的上述方法中,方式1仅能够得到当前运行栈的分析信息,而,方式2需要程序员手动对需要记录的位置添加相应的日志,并且日志只是按照时间顺序组合,也需要程序员对堆栈之间的关联关系进行人工分析,故此该方式2中堆栈分析开发成本高,分析效率低下。
发明内容
本申请实施例提供一种堆栈信息追踪方法、装置、计算机可读介质及计算装置,用于解决相关技术中当系统出现问题时,只能获取当前运行堆栈的信息,无法获取之前调用的堆栈信息,导致的bug定位不准确的问题。
第一方面,本申请实施例提供一种堆栈信息追踪方法,该方法包括:
在指定应用运行期间,从运行所述指定应用的操作系统的栈内存空间中获取多条栈信息,其中每条栈信息中包括,栈信息的来源、栈信息的进栈时序标识和出栈时序标识;
根据所述栈信息的来源确定属于同一堆栈的栈信息,并根据属于同一堆栈的栈信息的各自进栈时序标识和出栈时序标识,确定同一堆栈的开始栈信息和结束栈信息;
基于不同堆栈的开始栈信息和结束栈信息进行堆栈关联关系分析,确定出不同堆栈之间的关联关系。
第二方面,本申请实施例提供一种线程栈链追踪管控装置,所述装置包括:
获取单元,用于在指定应用运行期间,从运行所述指定应用的操作系统的栈内存空间中获取多条栈信息,其中每条栈信息中包括,栈信息的来源、栈信息的进栈时序标识和出栈时序标识;
确定单元,用于根据所述栈信息的来源确定属于同一堆栈的栈信息,并根据属于同一堆栈的栈信息的各自进栈时序标识和出栈时序标识,确定同一堆栈的开始栈信息和结束栈信息;
分析单元,用于基于不同堆栈的开始栈信息和结束栈信息进行堆栈关联关系分析,确定出不同堆栈之间的关联关系。
本申请另一实施例还提供了一种计算装置,包括至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本申请实施例提供的任一堆栈信息追踪方法。
本申请另一实施例还提供了一种计算机存储介质,其中,所述计算机存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行本申请实施例中的任一堆栈信息追踪方法。
本申请实施例提供的一种堆栈信息追踪方法、装置、计算机可读介质及计算装置。该方法中,在指定应用运行期间,从运行所述指定应用的操作系统的栈内存空间中获取多条栈信息;根据栈信息的来源确定属于同一堆栈的栈信息,并根据属于同一堆栈的栈信息的各自进栈时序标识和出栈时序标识,确定同一堆栈的开始栈信息和结束栈信息;基于不同堆栈的开始栈信息和结束栈信息进行堆栈关联关系分析,确定出不同堆栈之间的关联关系。这样,通过生成按照其中任两个堆栈的因果关系排序得到的栈链,可让开发者更好的定位漏洞。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1位本申请实施例提供一种堆栈信息追踪方法的应用场景示意图;
图2为本申请实施例中的堆栈信息追踪方法的流程示意图;
图3为本申请实施例中基于SDK的堆栈追踪的流程示意图;
图4为本申请实施例中的局部栈链生成的示意图;
图5为本申请实施例中的栈追踪技术的运行流程示意图;
图6为本申请实施例中的堆栈信息追踪装置的结构示意图;
图7为根据本申请实施方式的计算装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
发明人研究发现,相关技术中,对于线程栈的追踪技术至少存在以下问题:只能在很局限的局部分析,例如只能获取当前运行栈的栈信息内容;或者通过日志来记录程序运行状态时,虽然可以得到全局信息,但是需要程序员手动对需要记录的位置添加相应的日志,并且日志只是按照时间顺序组合,而不是方法的因果顺序(例如调用关系),因此对于bug的定位没有栈分析那么简单直接,需要增大很多分析工作量。故此,当系统出现问题时,只能获取当前运行堆栈的信息,无法获取之前调用的堆栈信息,导致的bug定位不准确的问题。而通过日志分析的方法成本高,效率低下。
有鉴于此,本申请实施例中提供一种堆栈信息追踪方法、装置、计算机可读介质及计算装置。本申请实施例中,首先在指定应用运行期间,从运行所述指定应用的操作系统的栈内存空间中获取多条栈信息,其中每条栈信息中可包括,栈信息的来源、栈信息的进栈时序标识和出栈时序标识;然后通过分析栈内存空间中的栈信息的进栈出栈顺序可确定同一堆栈的开始栈信息和结束栈信息;可进一步的,基于不同堆栈的开始栈信息和结束栈信息分析不同堆栈之间的关联关系。通过本申请实施例的方法,能够自动确定出不同堆栈之间的关联关系,并可以进一步生成按照任两个堆栈的因果关系排序得到的栈链,可让开发者更好的定位bug问题,从而提高系统中bug定位的准确性。
需要说明的是,上述方法中的栈信息是在栈内存空间中存放的一个完整的当前运行栈信息的记录,每条栈信息表示程序运行过程中的一条记录,例如一个方法的指令,不同方法的栈信息能够间接表达不同方法之间的调用关系。将当前运行栈信息备份下来之后,便可得到多个备份的栈信息的记录;以及,上述方法中的栈信息的进栈时序标识用于表示按照进栈时间先后顺序进行排序的标识,出栈时序标识用于标识栈信息出栈的时间先后进行排序。同一堆栈的进入栈内存空间的第一条栈信息为开始栈信息,类似的同一堆栈的最后一条进入栈内存空间的栈信息为结束栈信息。对栈信息进行打标即可标注出进栈时序标识和出栈时序标识。
参阅图1,本申请实施例提供一种堆栈信息追踪方法的应用场景示意图,该场景中包括用户10、终端11、业务后台服务器12。用户10可通过终端11获取多条栈信息,并且栈信息可备份到业务后台服务器上,备份的栈信息用于后续根据业务逻辑进行调用时接收调用指令。当然具体实施时,应用场景中也可以没有业务后台服务器12,仅通过智能终端进行分析。也可以对服务器运行的应用程序进行栈信息的追踪和分析,也即,只有需要分析应用程序运行期间的栈的关联关系的场景,本申请均适用。
下面结合附图对本申请实施例提供的一种堆栈信息追踪方法做进一步说明。图2为堆栈信息追踪方法的流程示意图,包括以下步骤:
步骤201:在指定应用运行期间,从运行所述指定应用的操作系统的栈内存空间中获取多条栈信息,其中每条栈信息中包括,栈信息的来源、栈信息的进栈时序标识和出栈时序标识。
在一个实施例中,为了便于开发相应的栈信息追踪功能,并能够方便的集成到指定应用中以此来获取栈信息,本申请中可预先集成用于进行堆栈追踪的SDK(SoftwareDevelopment Kit,软件开发工具包),对于安卓系统,可以基于SDK包生成APK(Androidapplication package,安卓应用程序包)以供安卓系统的指定应用具有栈信息追踪能力。因此,对于引用了栈追踪技术的指定应用的应用程序,运行时SDK会跟踪所有发生的栈信息,并将它们通过因果关系进行关联拼接,最终输出一个完整的栈链信息。并且,产品接入的方式很简单,就是普通的插件SDK接入方式,产品应用程序接入栈追踪技术SDK以后,打包生成的APK就会引入栈追踪技术,当APK安装后生成的应用一旦启动,栈追踪SDK将会运行并记录所有栈信息并输出,可方便于进行堆栈信息的追踪。其中,所述用于进行堆栈追踪的SDK的堆栈追踪流程可参阅图3,为SDK的堆栈追踪的流程示意图,包括:
步骤301:获取开发的用于堆栈追踪的插件SDK。
步骤302:将SDK集成到指定应用的应用程序中。
步骤303:将集成有SDK的指定应用的应用程序的源码打包生成指定应用的产品APK,并安装生成指定应用。
在一个实施例中,APK是安卓操作系统使用的一种应用程序包的文件格式,用于分发和安装移动应用及中间件。需要说明的是,一个安卓应用程序的代码想要在安卓设备上运行,必须先进行编译,然后被打包成为一个被安卓系统所能识别的文件才可以被运行,而这种能被安卓系统识别并运行的文件格式便是APK。
步骤304:当产品APK的指定应用程序启动时,同时开启用于堆栈追踪的SDK。
步骤305:SDK追踪栈信息。
在一个实施例中,在指定应用的应用程序运行过程中,SDK会记录所有的运行过的堆栈信息。其中,可根据每条栈信息包含的栈信息的来源,确定属于同一堆栈的栈信息;并且根据每天栈消息的各自的进栈时序标识和出栈时序标识,确定同一堆栈的开始栈消息和结束栈消息,并对此进行分析得到堆栈之间的因果调用关系,进而生成栈链。
步骤306:输出完整栈链。
在一个实施例中,通过SDK的追踪和分析可实现构建任两个堆栈的串联关系,其中,在所述串联关系中包括用于表示所述任两个堆栈的因果关系;因此,当存在多个堆栈时,生成按照所述因果关系进行排序的栈链。其中,关于SDK的对栈信息进行分析的具体实施将在以下方法中会进一步说明。
步骤202:根据所述栈信息的来源确定属于同一堆栈的栈信息,并根据属于同一堆栈的栈信息的各自进栈时序标识和出栈时序标识,确定同一堆栈的开始栈信息和结束栈信息。
其中,为了便于分析不同堆栈之间的因果关系,本申请中栈信息的来源可包括以下中的至少一种或组合:方法名、类名、模块名、子应用分支名等。例如,若可根据模块名确定属于同一堆栈,可以是在模块A的栈信息内容中存在对于模块B的调用,因此,可以确定模块A与模块B属于同一堆栈的栈信息。这样,开发时可基于指定应用内部的业务逻辑和可能的堆栈之间的关系以及业务逻辑需要来设置SDK需要追踪分析哪些堆栈的关联关系。
在一个实施例中,对栈内存空间用于存储栈信息,每个堆栈的栈信息按一定的顺序进栈,并且栈内存空间中的栈信息后入的先出,即最后一条进入栈内存空间的栈信息要最先出栈,以此类推。且,当调用其他堆栈时,前一堆栈的栈信息要先在栈内存空间中清空,然后被调用堆栈的栈信息再依序进入栈内存空间。故此,通过监控栈内存空间可以或者栈内存空间中存储的各条栈信息的进栈出栈顺序,并以此来分析属于同一堆栈的栈信息及其开始栈信息和结束栈信息。
步骤203:基于不同堆栈的开始栈信息和结束栈信息进行堆栈关联关系分析,确定出不同堆栈之间的关联关系。
在一个实施例中,基于不同堆栈的开始栈信息和结束栈信息进行堆栈关联关系分析,其中,对于任两个堆栈,若其中一个堆栈的结束栈信息中包括另一个堆栈的描述信息,则确定所述任两个堆栈具有关联关系。例如,参阅图4,为本公开实施例进行堆栈关联关系分析的流程示意图,包括:
步骤401:指定应用运行期间调用模块A。
其中,在调用模块A的过程中,模块A会将模块A对应的栈信息发送给操作系统的消息队列,并且在模块A的栈信息中包含栈信息的来源、SDK在追踪栈信息时,可根据栈信息的进栈出栈顺序,为各栈信息进行打标,如添加栈信息的进栈时序标识和出栈时序标识。其中,根据模块A的栈信息的进栈时序标识和出栈时序标识可确定开始栈信息和结束栈信息,并且在模块A的结束栈信息中包含对于模块B的调用信息。例如,图4中模块A对应的发送MSG(Windows程序中的结构体,在Windows程序中,消息是由MSG结构体来表示的)消息中,包含对于模块B的调用信息,因此当消息处理方法轮询到模块A的栈消息时执行取出MSG消息并发起模块B执行请求的操作。
步骤402:模块A启动后将模块A的栈信息依序写入栈内存空间,并且在模块A结束时发送用于调用模块B的消息M到消息队列中。
步骤403:消息处理方法对消息队列进行轮询并对轮询到的各消息进行处理,并将轮询方法和处理方法相关的栈信息写入栈内存空间。
步骤404:消息处理方法轮询到消息M时,发起模块B执行请求给模块B。
其中,模块B执行请求预先写入到消息处理方法的堆栈内存空间中。
步骤405:模块B根据调用开始执行,并在执行期间依序向栈内存空间写入模块B的栈信息。
SDK对指定应用的模块A、消息处理方法以及模块B的各自的栈新进行追踪,从栈内存空间中获取模块A、消息处理方法以及模块B的栈信息。根据栈信息的来源确定各栈信息的来源,即确定出分别属于模块A,消息处理方法和模块B的栈信息。然后根据进栈时序标识以及出栈时序标识,可以识别出各栈的开始栈信息以及结束栈信息,并通过对各栈的栈信息进行分析能够得出各栈的关联关系,例如分析出模块A发送的消息C到消息队列,消息处理方法处理消息C发起了调用模块B的请求,故此,可以分析出模块B是由模块A的消息C调用的,即得到了模块A和模块B之间的关联关系。
在一个实施例中,上述通过消息的方式调用其他模块时,该消息中可携带有需要调用的另一堆栈的描述信息标识,故此,在进行堆栈之间的关联关系分析时,可基于消息中的描述信息标识准确的定位到两个堆栈之间的关联关系。
然而,可能实际使用时,无法根据描述信息标识来确定两堆栈之间的关联关系,为了能够自动的对堆栈的关联关系进行分析,本申请实施例中还可以采用模糊匹配的方式,如在另一个实施例中,关联关系的分析还可实施为对所述任两个堆栈的栈信息通过上下文分析,确定所述任两个堆栈是否具有关联关系。其中,通过上下文分析具有不同的实施方式,包括:
(1)基于语法分析的上下文分析。
在一个实施例中,可根据语法树对不同堆栈之间的栈信息内容进行上下文的语法分析。
(2)基于语义分析的上下文分析。
在一个实施例中,基于语义分析的上下文分析首先要做分词,即将堆栈内的栈消息内容进行切分;实施时可选的,基于字符串匹配的分词方法、全切分方法或者有字构词的分词方法。其中,以全切分方法为例,它首先切分出与词库匹配的所有可能的词,再运用统计语言模型决定最优的切分结果,它的优点在于可以解决分词中的歧义问题。统计语言模型是用来计算一个句子产生概率的概率模型,因此,根据该模型当统计出两个堆栈之间分词的相关概率越高,即表明两个堆栈之间的关联关系越高。
实施时,基于语法分析的上下文分析和基于语义分析的上下文分析还可结合起来进行上下文分析,结合之后的可得到更加准确的分析结果。
(3)基于机器学习方法的上下文分析。
在一个实施例中,可通过机器学习训练模型对任两个程序的堆栈的关联关系进行模型训练。基于训练得到的关联关系的模型,可用于分析两个堆栈之间的关联关系。
通过上下文分析方法,可以实现对可能存在关联的栈信息的分析,从而挖掘出不同堆栈之间的关联关系,且上下文分析方法,相当于模糊匹配堆栈之间的关联关系,应用范围更加广泛,能够挖掘出更多的堆栈之间的关联关系。
通过前述方法确定任两个堆栈具有关联关系之后,可构建所述任两个堆栈的串联关系,其中,在所述串联关系中包括用于表示所述任两个堆栈的因果关系;当存在多个堆栈时,生成按照所述因果关系进行排序的栈链。例如,模块A与模块B具有关联关系,并且模块A与模块B的关联关系为模块A调用模块B,因此可构建模块A与模块B的串联关系;同理模块B与模块C的关联关系为模块B调用模块C,因此可构建模块B与模块C的串联关系;此时存在三个堆栈,可按照模块A与模块B、模块B与模块C的因果串联关系生成按照模块A、模块B、模块C的顺序串联的完整栈链进行输出。
通过本方法,将同一堆栈中的运行过的堆栈按照因果关系进行串联,并输出完整的栈链,因此,开发人员可根据输出的栈链分析完整的堆栈信息,因此,可避免仅能分析当前运行栈的问题而不能准确定位bug的问题,从而使开发人员提高bug定位的准确性。
参阅图5,为本公开实施例的一种堆栈信息追踪方法的运行流程图,其中,可主要由三个核心模块来实现堆栈信息追踪方法,包括栈追踪器、因果关系分析器和栈信息记录器,其中这个核心模块仅是从功能上划分,实施时,可根据实际需求确定不同功能模块的数量和各自的具体功能:
1)、栈追踪器51
在一个实施例中,栈追踪器首先获取指定应用程序的操作系统的栈内存空间中的当前运行栈信息,其中当前运行栈信息中包括,栈信息的来源、栈信息的进栈时序标识和出栈时序标识。实施时,栈追踪器会将获取到的当前运行栈信息发送给栈信息记录器进行备份,即备份栈信息,备份栈信息时可对其进行打标,例如标注进栈时序标识以及出栈时序标识。
此外,实施时,栈追踪器会响应因果分析器发起的追踪命令,追踪命令相当于语义追踪,即用于当栈追踪器对追踪命令中包含的追踪要求的目标栈信息在下次执行时,通过追踪命令触发追踪相应的目标栈信息并备份到栈信息记录器。追踪命令可基于开发者的业务逻辑触发,例如模块B被调用时触发追踪命令以实现对当前运行栈即B模块的栈的追踪,当然,具体实施时,何时触发追踪命令可以根据实际需求设定。
2)、栈信息记录器52
在一个实施例中,栈信息记录器的主要作用是存储接收到栈追踪器追踪到的所有栈信息以及存储接收到因果分析器分析之后的根据因果关系进行排序的栈链,并且可将所述栈链向指定应用程序输出。
3)、因果关系分析器53
在一个实施例中,因果关系分析器会轮询获取栈信息记录器中备份的栈信息,并根据栈信息记录器中备份的栈信息中栈信息的来源确定属于同一堆栈的栈信息,并确定获取到的同一堆栈的栈信息的进栈时序表示和出栈时序标识,从而确定同一堆栈的开始栈信息和结束栈信息。
进一步的,因果关系分析器基于不同堆栈的开始栈信息和结束栈信息可进行堆栈关联关系分析,并确定出不同堆栈之间的关联关系。其中进行堆栈关联关系分析,在一个实施例中,对于任两个堆栈,若其中一个堆栈的结束栈信息中包括另一个堆栈的描述信息,则确定所述任两个堆栈具有关联关系;在另一个实施例中,对于任两个堆栈,对所述任两个堆栈的栈信息通过上下文分析,确定所述任两个堆栈是否具有关联关系。
实施时,当确定任两个堆栈具有关联关系之后,进一步的,因果关系分析器构建所述任两个堆栈的串联关系,其中,在所述串联关系中包括用于表示所述任两个堆栈的因果关系;此外,当存在多个堆栈时,生成按照所述因果关系进行排序的栈链,并且将生成的栈链输出给栈信息记录器。
基于相同的发明构思,本申请实施例还提供一种线程栈链追踪管控装置。
如图6所示,该装置包括:
获取单元601,用于在指定应用运行期间,从运行所述指定应用的操作系统的栈内存空间中获取多条栈信息,其中每条栈信息中包括,栈信息的来源、栈信息的进栈时序标识和出栈时序标识;
确定单元602,用于根据所述栈信息的来源确定属于同一堆栈的栈信息,并根据属于同一堆栈的栈信息的各自进栈时序标识和出栈时序标识,确定同一堆栈的开始栈信息和结束栈信息;
分析单元603,用于基于不同堆栈的开始栈信息和结束栈信息进行堆栈关联关系分析,确定出不同堆栈之间的关联关系。
进一步的,所述栈信息的来源包括以下中的至少一种或组合:方法名、类名、单元名、子应用分支名。
进一步的,分析单元603包括:
对于任两个堆栈,若其中一个堆栈的结束栈信息中包括另一个堆栈的描述信息,则确定所述任两个堆栈具有关联关系。
进一步的,分析单元603包括:
对于任两个堆栈,对所述任两个堆栈的栈信息通过上下文分析,确定所述任两个堆栈是否具有关联关系。
进一步的,所述上下文分析,包括以下中的至少一种或组合:
基于语法分析的上下文分析,基于语义分析的上下文分析,基于机器学习方法的上下文分析。
进一步的,所述装置确定所述任两个堆栈具有关联关系之后还包括:
构建所述任两个堆栈的串联关系,其中,在所述串联关系中包括用于表示所述任两个堆栈的因果关系;
当存在多个堆栈时,生成按照所述因果关系进行排序的栈链。
进一步的,所述指定应用中预先集成有用于进行堆栈追踪的SDK。
在介绍了本申请示例性实施方式的堆栈信息追踪方法、和装置之后,接下来,介绍根据本申请的另一示例性实施方式的计算装置。
所属技术领域的技术人员能够理解,本申请的各个方面可以实现为系统、方法或程序产品。因此,本申请的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
在一些可能的实施方式中,根据本申请的计算装置可以至少包括至少一个处理器、以及至少一个存储器。其中,存储器存储有程序代码,当程序代码被处理器执行时,使得处理器执行本说明书上述描述的根据本申请各种示例性实施方式的堆栈信息追踪方法中的步骤。例如,处理器可以执行如图2中所示的步骤201-203。
下面参照图7来描述根据本申请的这种实施方式的计算装置70。图7显示的计算装置70仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图7所示,计算装置70以通用计算装置的形式表现。计算装置70的组件可以包括但不限于:上述至少一个处理器71、上述至少一个存储器72、连接不同系统组件(包括存储器72和处理器71)的总线73。
总线73表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。
存储器72可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)721和/或高速缓存存储器722,还可以进一步包括只读存储器(ROM)723。
存储器72还可以包括具有一组(至少一个)程序模块724的程序/实用工具725,这样的程序模块724包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
计算装置70也可以与一个或多个外部设备74(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与计算装置70交互的设备通信,和/或与使得该计算装置70能与一个或多个其它计算装置进行通信的任何设备(例如路由器、调制解调器等)通信。这种通信可以通过输入/输出(I/O)接口75进行。并且,计算装置70还可以通过网络适配器76与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器76通过总线73与用于计算装置70的其它模块通信。应当理解,尽管图中未示出,可以结合计算装置70使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
在一些可能的实施方式中,本申请提供的堆栈信息追踪方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在计算机设备上运行时,程序代码用于使计算机设备执行本说明书上述描述的根据本申请各种示例性实施方式的堆栈信息追踪方法中的步骤,例如,计算机设备可以执行如图2中所示的步骤201-203。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本申请的实施方式的用于线程栈链追踪管控的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在计算装置上运行。然而,本申请的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本申请操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算装置上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算装置上部分在远程计算装置上执行、或者完全在远程计算装置或服务器上执行。在涉及远程计算装置的情形中,远程计算装置可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算装置,或者,可以连接到外部计算装置(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
此外,尽管在附图中以特定顺序描述了本申请方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (10)

1.一种堆栈信息追踪方法,其特征在于,所述方法包括:
在指定应用运行期间,从运行所述指定应用的操作系统的栈内存空间中获取多条栈信息,其中每条栈信息中包括,栈信息的来源、栈信息的进栈时序标识和出栈时序标识;
根据所述栈信息的来源确定属于同一堆栈的栈信息,并根据属于同一堆栈的栈信息的各自进栈时序标识和出栈时序标识,确定同一堆栈的开始栈信息和结束栈信息;
基于不同堆栈的开始栈信息和结束栈信息进行堆栈关联关系分析,确定出不同堆栈之间的关联关系。
2.根据权利要求1所述的方法,其特征在于,所述栈信息的来源包括以下中的至少一种或组合:方法名、类名、模块名、子应用分支名。
3.根据权利要求1所述的方法,其特征在于,基于不同堆栈的开始栈信息和结束栈信息进行堆栈关联关系分析,确定出不同堆栈之间的关联关系,包括:
对于任两个堆栈,若其中一个堆栈的结束栈信息中包括另一个堆栈的描述信息,则确定所述任两个堆栈具有关联关系。
4.根据权利要求1所述的方法,其特征在于,基于不同堆栈的开始栈信息和结束栈信息进行堆栈关联关系分析,确定出不同堆栈之间的关联关系,包括:
对于任两个堆栈,对所述任两个堆栈的栈信息通过上下文分析,确定所述任两个堆栈是否具有关联关系。
5.根据权利要求4所述的方法,其特征在于,所述上下文分析,包括以下中的至少一种或组合:
基于语法分析的上下文分析,基于语义分析的上下文分析,基于机器学习方法的上下文分析。
6.根据权利要求3-5中任一所述的方法,其特征在于,确定所述任两个堆栈具有关联关系之后,所述方法还包括:
构建所述任两个堆栈的串联关系,其中,在所述串联关系中包括用于表示所述任两个堆栈的因果关系;
当存在多个堆栈时,生成按照所述因果关系进行排序的栈链。
7.根据权利要求1所述的方法,其特征在于,所述指定应用中预先集成有用于进行堆栈追踪的SDK。
8.一种堆栈信息追踪装置,其特征在于,所述装置包括:
获取单元,用于在指定应用运行期间,从运行所述指定应用的操作系统的栈内存空间中获取多条栈信息,其中每条栈信息中包括,栈信息的来源、栈信息的进栈时序标识和出栈时序标识;
确定单元,用于根据所述栈信息的来源确定属于同一堆栈的栈信息,并根据属于同一堆栈的栈信息的各自进栈时序标识和出栈时序标识,确定同一堆栈的开始栈信息和结束栈信息;
分析单元,用于基于不同堆栈的开始栈信息和结束栈信息进行堆栈关联关系分析,确定出不同堆栈之间的关联关系。
9.一种计算机可读介质,存储有计算机可执行指令,其特征在于,所述计算机可执行指令用于执行如权利要求1-7中任一权利要求所述的方法。
10.一种计算装置,其特征在于,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1-7中任一权利要求所述的方法。
CN201910885640.8A 2019-09-19 2019-09-19 堆栈信息追踪方法、装置、计算机可读介质及计算装置 Active CN110618940B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910885640.8A CN110618940B (zh) 2019-09-19 2019-09-19 堆栈信息追踪方法、装置、计算机可读介质及计算装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910885640.8A CN110618940B (zh) 2019-09-19 2019-09-19 堆栈信息追踪方法、装置、计算机可读介质及计算装置

Publications (2)

Publication Number Publication Date
CN110618940A true CN110618940A (zh) 2019-12-27
CN110618940B CN110618940B (zh) 2024-02-06

Family

ID=68923534

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910885640.8A Active CN110618940B (zh) 2019-09-19 2019-09-19 堆栈信息追踪方法、装置、计算机可读介质及计算装置

Country Status (1)

Country Link
CN (1) CN110618940B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111858375A (zh) * 2020-07-28 2020-10-30 中国工商银行股份有限公司 软件测试方法、装置、电子设备和介质
CN112069202A (zh) * 2020-09-09 2020-12-11 上海携程商务有限公司 基于追踪技术的sql性能分析方法、系统、设备及介质
CN113282436A (zh) * 2021-05-21 2021-08-20 北京达佳互联信息技术有限公司 事件处理方法、装置、设备以及存储介质
CN113747470A (zh) * 2021-08-09 2021-12-03 咪咕音乐有限公司 接口流量的分析方法、路由设备及存储介质
CN114880247A (zh) * 2022-07-04 2022-08-09 成都行远捷科技有限公司 分布式条件下基于日志引导系统的bug分析方法
CN116894864A (zh) * 2023-09-06 2023-10-17 腾讯科技(深圳)有限公司 凸包检测方法、装置、设备及存储介质

Citations (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030233636A1 (en) * 2002-06-18 2003-12-18 Microsoft Corporation Debugger causality system and methods
US20040205409A1 (en) * 2003-03-28 2004-10-14 Gansha Wu Inlining with stack trace cache-based dynamic profiling
US20050183068A1 (en) * 2004-02-13 2005-08-18 Cwalina Krzysztof J. Correlating trace events
US20080098365A1 (en) * 2006-09-28 2008-04-24 Amit Kumar Performance analyzer
US20120159449A1 (en) * 2010-12-15 2012-06-21 International Business Machines Corporation Call Stack Inspection For A Thread Of Execution
US20130254710A1 (en) * 2012-03-22 2013-09-26 Microsoft Corporation Stacks for content organization
CN103853532A (zh) * 2012-11-29 2014-06-11 国际商业机器公司 用于函数调用的方法和装置
US20140229770A1 (en) * 2013-02-08 2014-08-14 Red Hat, Inc. Method and system for stack trace clustering
CN104346267A (zh) * 2013-08-08 2015-02-11 腾讯科技(深圳)有限公司 生成程序缺陷定位信息的方法及装置
CN104572046A (zh) * 2013-10-16 2015-04-29 腾讯科技(深圳)有限公司 一种堆栈还原方法和计算机系统
CN104731650A (zh) * 2013-12-18 2015-06-24 青岛海尔空调器有限总公司 系统接口调用信息的获取方法和装置
CN105144117A (zh) * 2012-12-14 2015-12-09 微软技术许可有限责任公司 对调用堆栈和上下文数据的自动相关和分析
CN106339315A (zh) * 2016-08-19 2017-01-18 东软集团股份有限公司 定位缺陷的方法及装置
CN106445769A (zh) * 2015-08-11 2017-02-22 腾讯科技(深圳)有限公司 计算机运行监测方法、装置和系统
US20170124319A1 (en) * 2015-10-29 2017-05-04 International Business Machines Corporation Using call stack snapshots to detect anomalous computer behavior
CN107291480A (zh) * 2017-08-15 2017-10-24 中国农业银行股份有限公司 一种函数调用方法及装置
CN107402886A (zh) * 2017-08-09 2017-11-28 腾讯科技(深圳)有限公司 堆栈分析方法及相关装置
CN107451045A (zh) * 2016-05-31 2017-12-08 北京信威通信技术股份有限公司 一种异常信息定位的方法及装置
CN109522209A (zh) * 2018-09-29 2019-03-26 中国平安人寿保险股份有限公司 日志堆栈信息分析方法及装置、计算机装置及存储介质
CN109783161A (zh) * 2018-12-11 2019-05-21 北京三快在线科技有限公司 iOS系统中应用程序的运行信息确定方法、装置
CN109871290A (zh) * 2019-03-07 2019-06-11 腾讯科技(深圳)有限公司 应用于Java的调用堆栈追踪方法、装置和存储介质

Patent Citations (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030233636A1 (en) * 2002-06-18 2003-12-18 Microsoft Corporation Debugger causality system and methods
US20040205409A1 (en) * 2003-03-28 2004-10-14 Gansha Wu Inlining with stack trace cache-based dynamic profiling
US20050183068A1 (en) * 2004-02-13 2005-08-18 Cwalina Krzysztof J. Correlating trace events
US20080098365A1 (en) * 2006-09-28 2008-04-24 Amit Kumar Performance analyzer
US20120159449A1 (en) * 2010-12-15 2012-06-21 International Business Machines Corporation Call Stack Inspection For A Thread Of Execution
US20130254710A1 (en) * 2012-03-22 2013-09-26 Microsoft Corporation Stacks for content organization
CN103853532A (zh) * 2012-11-29 2014-06-11 国际商业机器公司 用于函数调用的方法和装置
CN105144117A (zh) * 2012-12-14 2015-12-09 微软技术许可有限责任公司 对调用堆栈和上下文数据的自动相关和分析
US20140229770A1 (en) * 2013-02-08 2014-08-14 Red Hat, Inc. Method and system for stack trace clustering
CN104346267A (zh) * 2013-08-08 2015-02-11 腾讯科技(深圳)有限公司 生成程序缺陷定位信息的方法及装置
CN104572046A (zh) * 2013-10-16 2015-04-29 腾讯科技(深圳)有限公司 一种堆栈还原方法和计算机系统
CN104731650A (zh) * 2013-12-18 2015-06-24 青岛海尔空调器有限总公司 系统接口调用信息的获取方法和装置
CN106445769A (zh) * 2015-08-11 2017-02-22 腾讯科技(深圳)有限公司 计算机运行监测方法、装置和系统
US20170124319A1 (en) * 2015-10-29 2017-05-04 International Business Machines Corporation Using call stack snapshots to detect anomalous computer behavior
CN107451045A (zh) * 2016-05-31 2017-12-08 北京信威通信技术股份有限公司 一种异常信息定位的方法及装置
CN106339315A (zh) * 2016-08-19 2017-01-18 东软集团股份有限公司 定位缺陷的方法及装置
CN107402886A (zh) * 2017-08-09 2017-11-28 腾讯科技(深圳)有限公司 堆栈分析方法及相关装置
CN107291480A (zh) * 2017-08-15 2017-10-24 中国农业银行股份有限公司 一种函数调用方法及装置
CN109522209A (zh) * 2018-09-29 2019-03-26 中国平安人寿保险股份有限公司 日志堆栈信息分析方法及装置、计算机装置及存储介质
CN109783161A (zh) * 2018-12-11 2019-05-21 北京三快在线科技有限公司 iOS系统中应用程序的运行信息确定方法、装置
CN109871290A (zh) * 2019-03-07 2019-06-11 腾讯科技(深圳)有限公司 应用于Java的调用堆栈追踪方法、装置和存储介质

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111858375A (zh) * 2020-07-28 2020-10-30 中国工商银行股份有限公司 软件测试方法、装置、电子设备和介质
CN111858375B (zh) * 2020-07-28 2023-09-05 中国工商银行股份有限公司 软件测试方法、装置、电子设备和介质
CN112069202A (zh) * 2020-09-09 2020-12-11 上海携程商务有限公司 基于追踪技术的sql性能分析方法、系统、设备及介质
CN113282436A (zh) * 2021-05-21 2021-08-20 北京达佳互联信息技术有限公司 事件处理方法、装置、设备以及存储介质
CN113747470A (zh) * 2021-08-09 2021-12-03 咪咕音乐有限公司 接口流量的分析方法、路由设备及存储介质
CN113747470B (zh) * 2021-08-09 2024-05-24 咪咕音乐有限公司 接口流量的分析方法、路由设备及存储介质
CN114880247A (zh) * 2022-07-04 2022-08-09 成都行远捷科技有限公司 分布式条件下基于日志引导系统的bug分析方法
CN114880247B (zh) * 2022-07-04 2022-09-20 成都行远捷科技有限公司 分布式条件下基于日志引导系统的bug分析方法
CN116894864A (zh) * 2023-09-06 2023-10-17 腾讯科技(深圳)有限公司 凸包检测方法、装置、设备及存储介质
CN116894864B (zh) * 2023-09-06 2023-12-12 腾讯科技(深圳)有限公司 凸包检测方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN110618940B (zh) 2024-02-06

Similar Documents

Publication Publication Date Title
CN110618940B (zh) 堆栈信息追踪方法、装置、计算机可读介质及计算装置
US11226795B2 (en) Efficient state machines for real-time dataflow programming
US9223570B2 (en) Migration assistance using compiler metadata
WO2016196701A1 (en) Natural language engine for coding and debugging
CN109408528B (zh) 一种数据库脚本生成方法、装置、计算装置和存储介质
US20130132933A1 (en) Automated compliance testing during application development
CN112100072B (zh) 应用程序代码的静态检测方法、装置、设备及介质
CN110851324B (zh) 基于日志的巡检处理方法、装置以及电子设备、存储介质
CN113271237A (zh) 工控协议的解析方法、装置、存储介质及处理器
CN107391528B (zh) 前端组件依赖信息搜索方法及设备
CN110716804A (zh) 无用资源的自动删除方法、装置、存储介质及电子设备
CN113127136A (zh) Docker镜像生成方法及装置、存储介质、电子设备
CN111240772A (zh) 一种基于区块链的数据处理方法、装置及存储介质
CN111488275B (zh) Ui自动化测试方法、装置、存储介质及电子设备
CN112015467A (zh) 埋点方法、介质、装置和计算设备
CN109359055B (zh) 一种数据测试的方法和设备
CN115951916A (zh) 一种组件的处理方法、装置、电子设备及存储介质
CN113821486B (zh) pod库之间依赖关系的确定方法及其装置、电子设备
CN114090514A (zh) 分布式系统的日志检索方法及装置
CN110096281B (zh) 代码解析方法、解析服务器、存储介质及装置
CN113032256A (zh) 自动化测试方法、装置、计算机系统和可读存储介质
CN112925889A (zh) 自然语言处理方法、装置、电子设备和存储介质
CN112162954A (zh) 用户操作日志生成、路径的定位方法、装置、设备及介质
CN113360365A (zh) 一种流程测试方法和流程测试系统
CN117591104B (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
GR01 Patent grant
GR01 Patent grant