CN113778884A - 一种仿真调试方法、装置、计算设备以及计算机存储介质 - Google Patents

一种仿真调试方法、装置、计算设备以及计算机存储介质 Download PDF

Info

Publication number
CN113778884A
CN113778884A CN202111075026.9A CN202111075026A CN113778884A CN 113778884 A CN113778884 A CN 113778884A CN 202111075026 A CN202111075026 A CN 202111075026A CN 113778884 A CN113778884 A CN 113778884A
Authority
CN
China
Prior art keywords
code
detection
code segment
detection script
loop
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.)
Pending
Application number
CN202111075026.9A
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.)
Beijing Aixin Technology Co ltd
Original Assignee
Beijing Aixin Technology 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 Beijing Aixin Technology Co ltd filed Critical Beijing Aixin Technology Co ltd
Priority to CN202111075026.9A priority Critical patent/CN113778884A/zh
Publication of CN113778884A publication Critical patent/CN113778884A/zh
Pending legal-status Critical Current

Links

Images

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/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • 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
    • G06F11/0766Error or fault reporting or storing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/39Circuit design at the physical level
    • G06F30/398Design verification or optimisation, e.g. using design rule check [DRC], layout versus schematics [LVS] or finite element methods [FEM]

Abstract

本申请实施例提供了一种仿真调试方法、装置、计算设备以及计算机存储介质。其中,确定执行检测脚本的代码区域;在所述代码区域中,通过执行所述检测脚本,检测发生死循环的代码片段;当检测到发生死循环的代码片段时,将所述代码片段的检测时间以及所述代码片段对应的代码范围信息作为所述代码片段的定位信息,重定向到检测结果日志文件中,并输出所述检测结果日志文件;根据所述检测结果日志文件中的所述代码片段的定位信息,查询并调试所述代码片段。本实施例中,通过检测脚本能够快速检测发生死循环的代码片段,从而提高了调试仿真死循环的效率。

Description

一种仿真调试方法、装置、计算设备以及计算机存储介质
技术领域
本申请实施例涉及芯片验证技术领域,尤其涉及一种仿真调试方法、装置、计算设备以及计算机存储介质。
背景技术
随着芯片验证技术的发展,芯片验证技术中的验证方法学已经可以高效的运用面向对象等方法搭建验证平台中,但是芯片验证技术中的仿真技术依然不能高效的运用到面向对象等方法搭建验证平台。
在使用仿真技术的验证环境中,通常会遇到仿真死循环(也叫仿真挂死)的问题,针对仿真死循环的问题,目前通常是采用单步调试的方式(其中,单步调试是指程序开发中,为了找到程序的bug,通常采用的一种调试手段,一步一步跟踪程序执行的流程,根据变量的值,找到错误的原因。)解决仿真死循环的问题。
然而,单步调试的方式解决仿真死循环问题时,需要花费大量的时间,从而造成调试仿真死循环的效率低的问题。
发明内容
本申请实施例提供一种仿真调试方法、装置、计算设备以及计算机存储介质,通过检测脚本能够快速检测发生死循环的代码片段,从而提高了调试仿真死循环的效率。
第一方面,本申请实施例提供了一种仿真调试方法,包括:
确定执行检测脚本的代码区域;
在所述代码区域中,通过执行所述检测脚本,检测发生死循环的代码片段;
当检测到发生死循环的代码片段时,将所述代码片段的检测时间以及所述代码片段对应的代码范围信息作为所述代码片段的定位信息,重定向到检测结果日志文件中,并输出所述检测结果日志文件;
根据所述检测结果日志文件中的所述代码片段的定位信息,查询并调试所述代码片段。
可选地,在所述确定执行检测脚本的代码区域之前,还包括:
通过编译仿真验证环境以及待调试代码,生成可执行文件;
在所述可执行文件的多个代码区域中,确定出执行检测脚本的代码区域。
可选地,在所述代码区域中,通过执行所述检测脚本,检测发生死循环的代码片段之前,还包括:
编写检测脚本,并确定所述检测脚本的循环执行次数,所述检测脚本包括控制指令,通过所述控制指令,以控制仿真器按步骤执行所述代码区域中的代码片段。
可选地,所述在所述代码区域中,通过执行所述检测脚本,检测发生死循环的代码片段,包括:
在所述代码区域中,执行所述检测脚本,若检测到仿真器重复执行一代码片段时,将所述代码片段确定为发生死循环的代码片段。
可选地,还包括:
若未检测到仿真器重复执行一代码片段,判断所述检测脚本的循环执行次数是否为0,若不为0,继续执行所述检测脚本直至所述检测脚本的循环执行次数为0。
可选地,所述通过编译仿真验证环境以及待调试代码,生成可执行文件,包括:
利用完全编译命令,编译仿真验证环境和设计代码,生成可执行文件。
可选地,所述若未检测到仿真器重复执行一代码片段,判断所述检测脚本的循环执行次数是否为0,若不为0,继续执行所述检测脚本直至所述检测脚本的循环执行次数为0,包括:
若未检测到仿真器重复执行一代码片段,通过执行命令,判断所述检测脚本的循环执行次数是否为0,若不为0,继续执行所述检测脚本直至所述检测脚本的循环执行次数为0。
第二方面,本申请实施例提供了一种仿真调试装置,包括:
确定模块,用于确定检测脚本的代码区域;
检测模块,用于在所述代码区域中,通过执行所述检测脚本,检测发生死循环的代码片段;
输出模块,用于当检测到发生死循环的代码片段时,将所述代码片段的检测时间以及所述代码片段对应的代码范围信息作为所述代码片段的定位信息,重定向到检测结果日志文件中,并输出所述检测结果日志文件;
调试模块,用于根据所述检测结果日志文件中的所述代码片段的定位信息,查询并调试所述代码片段。
第三方面,本申请实施例提供了一种计算设备,包括处理组件以及存储组件;所述存储组件存储一个或多个计算机指令;所述一个或多个计算机指令用以被所述处理组件调用执行,实现上述第一方面所述的仿真调试方法。
第四方面,本申请实施例提供了一种计算机存储介质,存储有计算机程序,所述计算程序被计算机执行时,实现上述第一方面所述的仿真调试方法。
本申请实施例提供的中,确定执行检测脚本的代码区域;在所述代码区域中,通过执行所述检测脚本,检测发生死循环的代码片段;当检测到发生死循环的代码片段时,将所述代码片段的检测时间以及所述代码片段对应的代码范围信息作为所述代码片段的定位信息,重定向到检测结果日志文件中,并输出所述检测结果日志文件;根据所述检测结果日志文件中的所述代码片段的定位信息,查询并调试所述代码片段,通过检测脚本能够快速检测发生死循环的代码片段,从而提高了调试仿真死循环的效率。
本申请的这些方面或其他方面在以下实施例的描述中会更加简明易懂。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种仿真调试方法的流程图;
图2为本申请实施例提供的另一种仿真调试方法的流程图;
图3为本申请实施例提供的一种仿真调试装置的结构示意图;
图4为本申请实施例提供的一种计算设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
在本申请的说明书和权利要求书及上述附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如101、102等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在本申请的仿真调试方法进行介绍之前,相对本申请涉及的相关概念以及研究背景进行将要介绍:
(1)相关概念
单步调试:是指程序开发中,为了找到程序的bug,通常采用的一种调试手段,一步一步跟踪程序执行的流程,根据变量的值,找到错误的原因。
(2)研究背景
发明人发现:在目前的仿真验证仿真中,当遇到仿真死循环(也叫仿真挂死)的问题,业内人士通常是采用单步调试的方式,找到发生死循环的代码片段,从而解决仿真死循环的问题。然而,单步调试的方式解决仿真死循环问题时,需要花费大量的时间,从而造成调试仿真死循环的效率低的问题。
为解决上述调试仿真死循环的效率低的问题,本申请提供了一种仿真调试方法,通过编写检测脚本,并基于检测脚本能够快速检测发生死循环的代码片段,从而提高了调试仿真死循环的效率。
图1为本申请实施例提供了一种仿真调试方法的流程图,如图1所示,该方法包括:
101、确定执行检测脚本的代码区域。
在该步骤中,检测脚本为本申请执行仿真调试方法时所编写的脚本,通过检测脚本能够快速检测发生死循环的代码片段。关于检测脚本的具体内容将图2实施例部分。
本申请实施例中,通常在执行仿真调试之前,需要编译仿真验证环境以及待调试代码,生成可执行文件,并从可执行文件中筛选出需要进行仿真调试的代码区域(其中,代码区域包括多个代码片段),再在所述代码区域中,通过执行所述检测脚本,以检测出该代码区域中发生死循环的代码片段。
102、在所述代码区域中,通过执行所述检测脚本,检测发生死循环的代码片段。
本申请实施例中,编写的检测脚本中控制指令,通过所述控制指令,以控制调度仿真器按步骤(通常为按行)执行所述代码区域中的代码片段,且检测脚本中包括检测死循环的机制,例如,若检测脚本检测出仿真器再重复执行一代码片段时,则将所述代码片段确定为发生死循环的代码片段。
除此之外,还可以包括其他检测死循环的机制,例如,仿真器每次执行一代码片段之后,会在结果日志文件中输出该代码片段的相关信息,检测脚本通过检测结果日志文件,若检测出结果日志文件中重复输出同一条代码片段的相关信息,则将所述代码片段确定为发生死循环的代码片段。此外,还可根据需要设定其他的检测机制,本申请实施例对此不作限定。
103、当检测到发生死循环的代码片段时,将所述代码片段的检测时间以及所述代码片段对应的代码范围信息作为所述代码片段的定位信息,重定向到检测结果日志文件中,并输出所述检测结果日志文件。
在该步骤中,例如,检测脚本包括的检测死循环机制为:若检测脚本检测出仿真器再重复执行一代码片段时,则将所述代码片段确定为发生死循环的代码片段。当检测到发生死循环的代码片段时,需要获取该代码片段的检测时间(检测时间即为检测脚本检测出该代码片段为发生死循环的代码片段的时间)以及该代码片段对应的代码范围信息(一个代码片段通常包括多个字节,代码范围信息即为所包含的字节以及字节的数量等信息),并将这些信息(检测时间、代码范围信息)作为所述代码片段的定位信息,重定向到检测结果日志文件中。
本申请实施例中,通过将上述信息重定向到检测结果日志文件,以便于后续根据所述检测结果日志文件中的所述代码片段的定位信息,查询并调试所述代码片段,从而解决仿真调试出现死循环的问题。
104、根据所述检测结果日志文件中的所述代码片段的定位信息,查询并调试所述代码片段。
在该步骤中,可基于代码片段的定位信息在代码区域中快速查询到该代码片段。其中,查询定位代码的方式,可参见目前的代码定位技术,本申请对此不再累述。
本申请实施例中,通过调试代码片段,能够解决仿真死循环的问题,通过检测脚本能够快速检测出发生死循环的代码片段,相比起单步调试的方式,本申请的仿真调试方式,提高了检测死循环代码片段的效率以及解决仿真死循环的效率。
图2为本申请实施例提供了另一种仿真调试方法的流程图,如图2所示,该方法包括:
201、通过编译仿真验证环境以及待调试代码,生成可执行文件。
本申请实施例中,利用完全编译命令,编译仿真验证环境和设计代码,生成可执行文件。具体地,在编译时,在仿真器中增加使用-debug_all选项(即完全编译命令),能够编译设计代码和验证平台,其中,-debug_all选项能够使能仿真调试功能,从而通过编译仿真验证环境以及待调试代码,生成可执行文件,以便后续对可执行文件中的全部/部分代码区域进行仿真调试。
202、在所述可执行文件的多个代码区域中,确定出执行检测脚本的代码区域。
本申请实施例中,可通过执行检测脚本,对可执行文件中的全部/部分代码区域进行仿真调试,以检测代码区域中发生死循环的代码片段。
203、确定执行检测脚本的代码区域。
本申请实施例中,该步骤的执行过程可参见上述实施例的步骤101,本申请实施例对此不再累述。
204、编写检测脚本,并确定所述检测脚本的循环执行次数,所述检测脚本包括控制指令,通过所述控制指令,以控制仿真器按步骤执行所述代码区域中的代码片段。
本申请实施例中,作为一种可能实现的方式,检测脚本如下代码所示:
#!/usr/bin/tclsh//tcl脚本通用开头
proc loop_detect{args}{//定义函数loop_detect,参数传递args,其中,args可以是输入帮助字符,也可以输入检测脚本的循环执行次数set help"-help"//设置帮助字符为-help
if{[string equal$args$help]!=1}{//如果函数传递的参数args不是-help命令,执行后续代码“config followactivescope on”,否则执行后续代码“puts"Usage:loop_detect<no.of iteration>"”
config followactivescope on//确定代码区域,并使能控制指令,以控制仿真器按步骤执行所述代码区域中的代码片段
set i 0;
while{$i<$args}{//循环args次,args表示为检测脚本的循环执行次数
run_step//通过run命令,循环执行检测脚本
incr i//i递增
}
}else{
puts"Usage:loop_detect<no.of iteration>"//输出帮助信息
}
}
proc run_step{}{
redirect-f loop.txt-a{set x[step]};//重定向set x[step]结果到结果日志文件,其中,set x[step]结果为发生死循环的代码片段的检测时间
redirect-f loop.txt-a{set y[scope]};//重定向set y[step]结果到结果日志文件,其中,set y[step]结果为发生死循环的代码片段的代码范围信息
puts$x;//输出结果
puts$y;//输出结果
}
在上述代码中,所述检测脚本包括控制指令“config followactivescope on”,通过所述控制指令,以控制仿真器按步骤执行所述代码区域中的代码片段。所述检测脚本包括检测脚本的循环执行次数“args”,通过设置循环执行次数,以使得检测脚本循环检测代码区域,便于实时发现发生死循环的代码片段,从而保证了仿真调试的效率。
205、在所述代码区域中,执行所述检测脚本,若检测到仿真器重复执行一代码片段时,将所述代码片段确定为发生死循环的代码片段。
在该步骤中,本申请实施例中,编写的检测脚本中控制指令除了能够控制仿真器按步骤执行所述代码区域中的代码片段之外,还包括检测死循环的机制,例如,若检测到仿真器重复执行一代码片段时,将所述代码片段确定为发生死循环的代码片段。
除此之外,还可以包括其他检测死循环的机制,例如,仿真器每次执行一代码片段之后,会在结果日志文件中输出该代码片段的检测时间以及代码范围信息,检测脚本通过检测结果日志文件,若检测出结果日志文件中重复输出同一条代码片段的检测时间以及代码范围信息,则将所述代码片段确定为发生死循环的代码片段。
需要说明的是,步骤205仅为一种检测机制示例,步骤205中的检测脚本代码也仅为一种检测脚本示例,还可根据需要设定其他的检测机制和检测脚本,本申请实施例对此不作限定,只要是以检测脚本检测死循环的代码片段的方案均在本申请的保护范围内。
进一步地,在步骤205之前,还包括:利用ucli命令,启动仿真验证功能,对所述代码区域进行仿真验证,并在ucli命令行中加载使用source命令(配置脚本命令),让仿真器能够看到检测脚本,再继续执行步骤205,在所述代码区域中,执行所述检测脚本。
205’、若未检测到仿真器重复执行一代码片段,判断所述检测脚本的循环执行次数是否为0,若不为0,继续执行所述检测脚本直至所述检测脚本的循环执行次数为0。
本申请实施例中,作为一种可能的实现方案,如上述检测脚本代码所示
“set i 0;
while{$i<$args}{//循环args次,args表示为检测脚本的循环执行次数
run_step//通过run命令,循环执行检测脚本
incr i//i递增
}”
若未检测到仿真器重复执行一代码片段,通过执行命令(run命令),判断所述检测脚本的循环执行次数是否为0,若不为0,继续执行所述检测脚本直至所述检测脚本的循环执行次数为0。
需要说明的是,当循环执行次数为0时,停止执行所述检测脚本,并将循环执行次数非0时的检测结果,记录在结果日志文件中。
206、当检测到发生死循环的代码片段时,将所述代码片段的检测时间以及所述代码片段对应的代码范围信息作为所述代码片段的定位信息,重定向到检测结果日志文件中,并输出所述检测结果日志文件。
本申请实施例中,该步骤的执行过程可参见上述实施例的步骤103,本申请实施例对此不再累述。
207、根据所述检测结果日志文件中的所述代码片段的定位信息,查询并调试所述代码片段。
本申请实施例中,该步骤的执行过程可参见上述实施例的步骤104,本申请实施例对此不再累述。
该方法,还包括:利用help命令,输出帮助信息。
在该步骤中,如上述检测脚本代码(其中,“……;”表示为代码省略部分)所示
“if{[string equal$args$help]!=1}{
……;
}else{
puts"Usage:loop_detect<no.of iteration>"
}”
通过输入help命令,输出帮助信息,帮助信息可理解为说明书,通过输出帮助信息便于用户了解检测脚本或者仿真器的相关信息。
图3为本申请实施例提供了一种仿真调试装置的结构示意图,如图3所示,该装置包括:
确定模块31,用于确定检测脚本的代码区域;
检测模块32,用于在所述代码区域中,通过执行所述检测脚本,检测发生死循环的代码片段;
输出模块33,用于当检测到发生死循环的代码片段时,将所述代码片段的检测时间以及所述代码片段对应的代码范围信息作为所述代码片段的定位信息,重定向到检测结果日志文件中,并输出所述检测结果日志文件;
调试模块34,用于根据所述检测结果日志文件中的所述代码片段的定位信息,查询并调试所述代码片段。
本申请实施例中,可选地,该装置还包括预处理模块35。
预处理模块35用于通过编译仿真验证环境以及待调试代码,生成可执行文件;在所述可执行文件的多个代码区域中,确定出执行检测脚本的代码区域。
本申请实施例中,可选地,该装置的预处理模块35还用于编写检测脚本,并确定所述检测脚本的循环执行次数,所述检测脚本包括控制指令,通过所述控制指令,以控制仿真器按步骤执行所述代码区域中的代码片段。
本申请实施例中,可选地,该装置的检测模块32具体用于在所述代码区域中,执行所述检测脚本,若检测模块32检测到仿真器重复执行一代码片段时,将所述代码片段确定为发生死循环的代码片段。若检测模块32未检测到仿真器重复执行一代码片段,判断所述检测脚本的循环执行次数是否为0,若不为0,继续执行所述检测脚本直至所述检测脚本的循环执行次数为0。
本申请实施例中,可选地,该装置的预处理模块35具体用于利用完全编译命令,编译仿真验证环境和设计代码,生成可执行文件。
本申请实施例中,可选地,该装置的检测模块32具体用于若未检测到仿真器重复执行一代码片段,通过执行命令,判断所述检测脚本的循环执行次数是否为0,若不为0,继续执行所述检测脚本直至所述检测脚本的循环执行次数为0。
图3所述的仿真调试装置可以执行图2所示实施例所述的仿真调试方法,其实现原理和技术效果不再赘述。对于上述实施例中的仿真调试装置其中各个模块、单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
在一个可能的设计中,图3所示实施例的仿真调试装置可以实现为一计算设备,实际应用中,如图4中所示,该计算设备可以包括存储组件401以及处理组件402;
存储组件401中存储有一条或多条计算机指令,其中,一条或多条计算机指令供处理组件402调用执行,以实现图1或图2实施例所述的仿真调试方法。
其中,处理组件402可以包括一个或多个处理器来执行计算机指令,以完成上述的方法中的全部或部分步骤。当然处理组件也可以为一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述图1或图2实施例所述的仿真调试方法。
存储组件401被配置为存储各种类型的数据以支持在终端的操作。存储组件可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
本申请实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被计算机执行时可以实现上述图1或图2所示实施例的仿真调试方法。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施例可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (10)

1.一种仿真调试方法,其特征在于,包括:
确定执行检测脚本的代码区域;
在所述代码区域中,通过执行所述检测脚本,检测发生死循环的代码片段;
当检测到发生死循环的代码片段时,将所述代码片段的检测时间以及所述代码片段对应的代码范围信息作为所述代码片段的定位信息,重定向到检测结果日志文件中,并输出所述检测结果日志文件;
根据所述检测结果日志文件中的所述代码片段的定位信息,查询并调试所述代码片段。
2.根据权利要求1所述的方法,其特征在于,在所述确定执行检测脚本的代码区域之前,还包括:
通过编译仿真验证环境以及待调试代码,生成可执行文件;
在所述可执行文件的多个代码区域中,确定出执行检测脚本的代码区域。
3.根据权利要求1所述的方法,其特征在于,在所述代码区域中,通过执行所述检测脚本,检测发生死循环的代码片段之前,还包括:
编写检测脚本,并确定所述检测脚本的循环执行次数,所述检测脚本包括控制指令,通过所述控制指令,以控制仿真器按步骤执行所述代码区域中的代码片段。
4.根据权利要求3所述的方法,其特征在于,所述在所述代码区域中,通过执行所述检测脚本,检测发生死循环的代码片段,包括:
在所述代码区域中,执行所述检测脚本,若检测到仿真器重复执行一代码片段时,将所述代码片段确定为发生死循环的代码片段。
5.根据权利要求4所述的方法,其特征在于,还包括:
若未检测到仿真器重复执行一代码片段,判断所述检测脚本的循环执行次数是否为0,若不为0,继续执行所述检测脚本直至所述检测脚本的循环执行次数为0。
6.根据权利要求2所述的方法,其特征在于,所述通过编译仿真验证环境以及待调试代码,生成可执行文件,包括:
利用完全编译命令,编译仿真验证环境和设计代码,生成可执行文件。
7.根据权利要求1所述的方法,其特征在于,所述若未检测到仿真器重复执行一代码片段,判断所述检测脚本的循环执行次数是否为0,若不为0,继续执行所述检测脚本直至所述检测脚本的循环执行次数为0,包括:
若未检测到仿真器重复执行一代码片段,通过执行命令,判断所述检测脚本的循环执行次数是否为0,若不为0,继续执行所述检测脚本直至所述检测脚本的循环执行次数为0。
8.一种仿真调试装置,其特征在于,包括:
确定模块,用于确定检测脚本的代码区域;
检测模块,用于在所述代码区域中,通过执行所述检测脚本,检测发生死循环的代码片段;
输出模块,用于当检测到发生死循环的代码片段时,将所述代码片段的检测时间以及所述代码片段对应的代码范围信息作为所述代码片段的定位信息,重定向到检测结果日志文件中,并输出所述检测结果日志文件;
调试模块,用于根据所述检测结果日志文件中的所述代码片段的定位信息,查询并调试所述代码片段。
9.一种计算设备,其特征在于,包括处理组件以及存储组件;所述存储组件存储一个或多个计算机指令;所述一个或多个计算机指令用以被所述处理组件调用执行,实现如权利要求1-7任一项所述的仿真调试方法。
10.一种计算机存储介质,其特征在于,存储有计算机程序,所述计算程序被计算机执行时,实现如权利要求1-7任一项所述的仿真调试方法。
CN202111075026.9A 2021-09-14 2021-09-14 一种仿真调试方法、装置、计算设备以及计算机存储介质 Pending CN113778884A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111075026.9A CN113778884A (zh) 2021-09-14 2021-09-14 一种仿真调试方法、装置、计算设备以及计算机存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111075026.9A CN113778884A (zh) 2021-09-14 2021-09-14 一种仿真调试方法、装置、计算设备以及计算机存储介质

Publications (1)

Publication Number Publication Date
CN113778884A true CN113778884A (zh) 2021-12-10

Family

ID=78843645

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111075026.9A Pending CN113778884A (zh) 2021-09-14 2021-09-14 一种仿真调试方法、装置、计算设备以及计算机存储介质

Country Status (1)

Country Link
CN (1) CN113778884A (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106250316A (zh) * 2016-08-09 2016-12-21 东软集团股份有限公司 一种死循环检测方法及装置
CN106488487A (zh) * 2015-08-27 2017-03-08 中兴通讯股份有限公司 故障检测方法及装置
CN109766273A (zh) * 2018-12-27 2019-05-17 百富计算机技术(深圳)有限公司 死循环的定位方法、装置、计算机设备和存储介质
CN109885478A (zh) * 2018-12-30 2019-06-14 贝壳技术有限公司 一种错误代码的定位方法及系统
CN110750450A (zh) * 2019-09-19 2020-02-04 深圳震有科技股份有限公司 一种软件死循环的定位方法、装置、系统及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106488487A (zh) * 2015-08-27 2017-03-08 中兴通讯股份有限公司 故障检测方法及装置
CN106250316A (zh) * 2016-08-09 2016-12-21 东软集团股份有限公司 一种死循环检测方法及装置
CN109766273A (zh) * 2018-12-27 2019-05-17 百富计算机技术(深圳)有限公司 死循环的定位方法、装置、计算机设备和存储介质
CN109885478A (zh) * 2018-12-30 2019-06-14 贝壳技术有限公司 一种错误代码的定位方法及系统
CN110750450A (zh) * 2019-09-19 2020-02-04 深圳震有科技股份有限公司 一种软件死循环的定位方法、装置、系统及存储介质

Similar Documents

Publication Publication Date Title
Godefroid Fuzzing: Hack, art, and science
Choi et al. Guided gui testing of android apps with minimal restart and approximate learning
Qi et al. Efficient automated program repair through fault-recorded testing prioritization
Kinder Towards static analysis of virtualization-obfuscated binaries
US5911073A (en) Method and apparatus for dynamic process monitoring through an ancillary control code system
US20100095281A1 (en) Internal Function Debugger
US10089126B2 (en) Function exit instrumentation for tail-call optimized code
US7761282B2 (en) System and method to simulate conditions and drive control-flow in software
US7546585B2 (en) Method, system and computer program product for testing computer programs
JP2006185211A (ja) プログラム解析装置、テスト実行装置、その解析方法及びプログラム
Chalupa et al. Evaluation of program slicing in software verification
Van Der Kouwe et al. HSFI: Accurate fault injection scalable to large code bases
Jiang et al. Retestdroid: towards safer regression test selection for android application
US7243059B2 (en) Simulation of hardware based on smart buffer objects
Tol et al. ZeroLeak: Using LLMs for Scalable and Cost Effective Side-Channel Patching
US20200272553A1 (en) Configurable system for interaction with system or processor states in development tools
Sosnowski et al. Software implemented fault inserters
US6983454B2 (en) Extended “run to” function
CN113778884A (zh) 一种仿真调试方法、装置、计算设备以及计算机存储介质
US9710360B2 (en) Optimizing error parsing in an integrated development environment
Alipour et al. Bounded model checking and feature omission diversity
US20220335135A1 (en) Vulnerability analysis and reporting for embedded systems
US5956511A (en) Program development support apparatus, program development support method, and storage medium therefor
Yan et al. Fast PokeEMU: Scaling generated instruction tests using aggregation and state chaining
Artho et al. Enforcer–efficient failure injection

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