C++程序崩溃的定位方法、装置、设备及存储介质制造方法及图纸

技术编号:31848697 阅读:18 留言:0更新日期:2022-01-12 13:30
本发明专利技术涉及数据定位领域,公开了一种C++程序崩溃的定位方法、装置、设备及存储介质。该方法包括:基于静态哈希函数建立内存数据库;根据预置FUNCSIG函数,读取所述内存数据库中调用函数的函数名称;判断所述内存数据库中的所述调用函数是否执行完毕;若执行完毕,则清除所述内存数据库中所述调用函数的函数名称;若未执行完毕,则读取所述C++程序的崩溃截获端口中的函数名称,将所述函数名称写入至预置记录日志中。记录日志中。记录日志中。

【技术实现步骤摘要】
C++程序崩溃的定位方法、装置、设备及存储介质


[0001]本专利技术涉及数据定位领域,尤其涉及一种C++程序崩溃的定位方法、装置、设备及存储介质。

技术介绍

[0002]软件开发会出现各种各样的Bug,在开发阶段可以通过调试比较容易定位问题,如果是发布包出现的偶现崩溃问题,往往不好定位,要么就是需要一定的技术功底,不利于初级程序员发现解决问题。
[0003]目前软件基本都会带有日志记录,出现问题后可以通过日记分析流程,从而定位问题,但是日志分析的准确性取决于日志的详细程度,这样的话,就有可能导致问题根本分析不出,而在每处都添加日志那也不合理。还有通过类似BugSplat的工具去发现发布版本的崩溃问题,不过这样的工具集成需要一定的技术能力,以及此类工具是收费的,因此公司需要增加额外成本。
[0004]因此,需要一种技术能解决当前的软件崩溃定位困难的技术问题。

技术实现思路

[0005]本专利技术的主要目的在于解决当前的软件崩溃定位困难的技术问题。
[0006]本专利技术第一方面提供了一种C++程序崩溃的定位方法,所述C++程序崩溃的定位方法包括:基于静态哈希函数建立内存数据库;根据预置FUNCSIG函数,读取所述内存数据库中调用函数的函数名称;判断所述内存数据库中的所述调用函数是否执行完毕;若执行完毕,则清除所述内存数据库中所述调用函数的函数名称;若未执行完毕,则读取所述C++程序的崩溃截获端口中的函数名称,将所述函数名称写入至预置记录日志中;其中,所述基于静态哈希函数建立内存数据库包括:创建静态哈希函数,其中,所述静态哈希函数包括:调用函数的函数名称数组;基于所述函数名称数组建立内存数据库。
[0007]可选的,在本专利技术第一方面的第一种实现方式中,所述根据预置FUNCSIG函数,读取所述内存数据库中调用函数的函数名称包括:根据Microsoft软件预置的FUNCSIG函数,抓取所述内存数据库中调用函数的函数名称。
[0008]可选的,在本专利技术第一方面的第二种实现方式中,所述判断所述内存数据库中的所述调用函数是否执行完毕包括:将所述FUNCSIG函数作为追踪对象,判断所述FUNCSIG函数读取的调用函数是否执行完毕。
[0009]可选的,在本专利技术第一方面的第三种实现方式中,所述读取所述C++程序的崩溃截获端口中的函数名称,将所述函数名称写入至预置记录日志中包括:读取Windows系统内置的崩溃截获端口的回调函数;读取所述回调函数的运行数据,得到所述调用函数的函数名称;将所述函数名称写入至预置记录日志中。
[0010]可选的,在本专利技术第一方面的第四种实现方式中,所述读取所述回调函数的运行数据,得到所述调用函数的函数名称包括:通过所述回调函数遍历所述内存数据库的数据,生成所述内存数据库中函数运行顺序;提取所述函数运行顺序中最后的运行函数对应函数名称。
[0011]可选的,在本专利技术第一方面的第五种实现方式中,所述清除所述内存数据库中所述调用函数的函数名称包括:通过所述FUNCSIG函数删除所述内存数据库中所述调用函数的函数名称。
[0012]本专利技术第二方面提供了一种C++程序崩溃的定位装置,包括:建立模块,用于基于静态哈希函数建立内存数据库;读取模块,用于根据预置FUNCSIG函数,读取所述内存数据库中调用函数的函数名称;判断模块,用于判断所述内存数据库中的所述调用函数是否执行完毕;清除模块,用于若执行完毕,则清除所述内存数据库中所述调用函数的函数名称;记录模块,用于若未执行完毕,则读取所述C++程序的崩溃截获端口中的函数名称,将所述函数名称写入至预置记录日志中;其中,所述建立模块具体用于:创建静态哈希函数,其中,所述静态哈希函数包括:调用函数的函数名称数组;基于所述函数名称数组建立内存数据库。
[0013]本专利技术第三方面提供了一种C++程序崩溃的定位设备,包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互连;所述至少一个处理器调用所述存储器中的所述指令,以使得所述C++程序崩溃的定位设备执行上述的C++程序崩溃的定位方法。
[0014]本专利技术的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述的C++程序崩溃的定位方法。
[0015]在本专利技术实施例中,能够较准确的定位软件崩溃发生所在函数,而且不会增加日志的复杂性,普通人也能够很方便集成使用,同时无需购买额外的工具。在软件发布环境下能够快速清晰定位软件崩溃所处函数,提高开发效率。
附图说明
[0016]图1为本专利技术实施例中C++程序崩溃的定位方法的一个实施例示意图;图2为本专利技术实施例中C++程序崩溃的定位装置的一个实施例示意图;图3为本专利技术实施例中C++程序崩溃的定位设备的一个实施例示意图。
具体实施方式
[0017]本专利技术实施例提供了一种C++程序崩溃的定位方法、装置、设备及存储介质。
[0018]本专利技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0019]为便于理解,下面对本专利技术实施例的具体流程进行描述,请参阅图1,本专利技术实施例中C++程序崩溃的定位方法的一个实施例包括:101、基于静态哈希函数建立内存数据库;在本实施例中,管理崩溃的哈希表数据结构static QHash<QString , TraceData*>,此数据结构是为了储存软件运行的数据。
[0020]进一步的,101还可以执行以下步骤:1011、创建静态哈希函数,其中,静态哈希函数包括:调用函数的函数名称数组;1012、基于函数名称数组建立内存数据库。
[0021]在本实施例中,每一个TraceData中包含一个调用函数名的数组std::vector<const char*>。此处使用哈希的目的,是为了是此方案支持多线程的快速定位,每一个TraceData管理一个线程的数据。
[0022]102、根据预置FUNCSIG函数,读取内存数据库中调用函数的函数名称;在本实施例中,有了储存数据结构,我们就需要获取所需要的数据,本方案是基于FUNCSIG函数在内存数据库中保存软件运行过程中的函数名称。
[0023]进一步的,在102还可以执行以下步骤:1021、根据Microsoft软件预置的FUNCSIG函数,抓取内存数据库中调用函数的函数名称。...

【技术保护点】

【技术特征摘要】
1.一种C++程序崩溃的定位方法,其特征在于,包括步骤:基于静态哈希函数建立内存数据库;根据预置FUNCSIG函数,读取所述内存数据库中调用函数的函数名称;判断所述内存数据库中的所述调用函数是否执行完毕;若执行完毕,则清除所述内存数据库中所述调用函数的函数名称;若未执行完毕,则读取所述C++程序的崩溃截获端口中的函数名称,将所述函数名称写入至预置记录日志中;其中,所述基于静态哈希函数建立内存数据库包括:创建静态哈希函数,其中,所述静态哈希函数包括:调用函数的函数名称数组;基于所述函数名称数组建立内存数据库。2.根据权利要求1所述的C++程序崩溃的定位方法,其特征在于,所述根据预置FUNCSIG函数,读取所述内存数据库中调用函数的函数名称包括:根据Microsoft软件预置的FUNCSIG函数,抓取所述内存数据库中调用函数的函数名称。3.根据权利要求1所述的C++程序崩溃的定位方法,其特征在于,所述判断所述内存数据库中的所述调用函数是否执行完毕包括:将所述FUNCSIG函数作为追踪对象,判断所述FUNCSIG函数读取的调用函数是否执行完毕。4.根据权利要求1所述的C++程序崩溃的定位方法,其特征在于,所述读取所述C++程序的崩溃截获端口中的函数名称,将所述函数名称写入至预置记录日志中包括:读取Windows系统内置的崩溃截获端口的回调函数;读取所述回调函数的运行数据,得到所述调用函数的函数名称;将所述函数名称写入至预置记录日志中。5.根据权利要求4所述的C++程序崩溃的定位方法,其特征在于,所述读取所述回调函数的运行数据,得到所述调用函数的函数名称包括:通过所述回调函数遍历所述内存数据库的数据,生...

【专利技术属性】
技术研发人员:刘梁李盛
申请(专利权)人:深圳软牛科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1