CN114238107A - 一种跟踪调试方法、***及计算机可读存储介质 - Google Patents
一种跟踪调试方法、***及计算机可读存储介质 Download PDFInfo
- Publication number
- CN114238107A CN114238107A CN202111529106.7A CN202111529106A CN114238107A CN 114238107 A CN114238107 A CN 114238107A CN 202111529106 A CN202111529106 A CN 202111529106A CN 114238107 A CN114238107 A CN 114238107A
- Authority
- CN
- China
- Prior art keywords
- tracking point
- debugging
- program
- tracking
- point
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供一种跟踪调试方法、***及计算机可读存储介质,预先定义了跟踪点集合中的各个跟踪点,程序依次经过各个跟踪点,再配置在目标跟踪点输出调试日志信息的跟踪点变量,通过调试命令来打开目标跟踪点对应的调试开关,通过开关控制每一个跟踪点的日志输出功能,可以指定目标跟踪点输出调试日志信息,从而减少了其他日志信息的产生,保证可以获取到足够信息的同时又不会被大量日志信息所干扰。本申请采用的变量计数跟踪,在程序运行流程中,可以快速定位异常信息,提高了程序调试问题定位的效率,并且,能够降低对程序性能的影响。
Description
技术领域
本申请涉及应用软件技术领域,具体而言,涉及一种跟踪调试方法、***及计算机可读存储介质。
背景技术
随着计算机技术和网络技术的飞速发展,应用软件在人们的日常生活、学习和工作中发挥的作用也越来越大。随着应用软件的不断扩大,针对程序的调试也越来越重要。
日志记录是开发人员常用的调试方法。在linux开发环境中,将带有众多变量的结构体直接打印到日志文件中比使用gdb(UNIX及UNIX-like下的调试工具)调试器更方便。此外,通过打印日志可以很清晰地观察到函数的执行顺序。但是,记录日志文件会对程序性能产生很大的影响,因此在对性能敏感的场景下并不适用,例如网络设备并且,在事务交易非常频繁的场景下,该调试方法产生的大量日志也会影响程序调试问题定位的效率。
发明内容
本申请实施例的目的在于提供一种跟踪调试方法、***及计算机可读存储介质,用以现有技术采用日志记录导致程序性能低,以及事务交易非常频繁的场景下,产生的大量日志影响程序调试问题定位的效率。
本申请实施例提供的一种跟踪调试方法,包括:
配置程序中的跟踪点变量;其中,跟踪点变量用于在目标跟踪点输出调试日志信息;
运行程序;在程序运行中,跟踪点变量依次经过跟踪点集合中的各个跟踪点;
获取调试命令,其中,调试命令用于指示目标跟踪点,以及打开目标跟踪点对应的调试开关;
在目标跟踪点处输出调试日志信息。
上述技术方案中,预先定义了跟踪点集合中的各个跟踪点,程序依次经过各个跟踪点,再配置在目标跟踪点输出调试日志信息的跟踪点变量,通过调试命令来打开目标跟踪点对应的调试开关,通过开关控制每一个跟踪点的日志输出功能,可以指定目标跟踪点输出调试日志信息,从而减少了其他日志信息的产生,保证可以获取到足够信息的同时又不会被大量日志信息所干扰。因此,本申请采用的变量计数跟踪,在程序运行流程中,可以快速定位异常信息,提高了程序调试问题定位的效率,并且,能够降低记录日志文件对程序性能的影响。
在一些可选的实施方式中,在配置程序中的跟踪点变量之前,还包括:
通过宏定义,引入跟踪点变量。
上述技术方案中,通过宏定义,将跟踪点变量的定义转为自动完成,提高开发效率,降低维护难度。
在一些可选的实施方式中,通过宏定义,引入跟踪点变量,包括:
将变量与变量对应的目标跟踪点、调试开关进行聚合操作,得到跟踪点变量。
配置程序中的跟踪点变量,包括:
初始化跟踪点变量的变量、目标跟踪点和调试开关。
上述技术方案中,通过宏定义,将变量与变量对应的目标跟踪点、调试开关进行聚合操作得到跟踪点变量的过程转为自动完成,提高开发效率,降低维护难度。
在一些可选的实施方式中,在运行程序之前,还包括:
根据所有变量生成跟踪点集合,利用编译器将跟踪点集合放置于程序的跟踪段。
在一些可选的实施方式中,调试命令,还用于:
遍历程序的跟踪段,利用pcre匹配的方式,匹配出目标跟踪点。
在一些可选的实施方式中,运行程序,跟踪点变量依次经过跟踪点集合中的各个跟踪点,包括:
通过宏定义,配置跟踪点变量在每经过一个跟踪点时,跟踪点计数数组相应的位置计数加1;其中,每个线程分配N个跟踪点计数的数组,N为跟踪点集合中的跟踪点总数。
上述技术方案中,利用宏定义,自动形成跟踪点的计数规则,并且用当前跟踪点的地址减去首个跟踪点的地址可计算出跟踪点下标,从而实现了对跟踪点的位置获取。
在一些可选的实施方式中,还包括:
利用宏定义,对调试开关的开启或关闭进行判断,并在目标跟踪点对应的调试开关被打开时,输出调试日志信息。
在一些可选的实施方式中,程序为C/C++程序,编译器为gcc编译器,宏定义为C/C++中宏定义。
上述技术方案中,针对C/C++程序,通过利用C/C++程序的宏定义和gcc编译器以及预设的一些控制命令逻辑,实现了一种可集成到程序中的跟踪调试方法,既能达到变量计数跟踪调试的高性能,又实现了日志信息的详细输出,并且提高了开发效率,降低了维护难度。
本申请实施例提供的一种跟踪调试***,包括:
配置模块,用于配置程序中的跟踪点变量;其中,跟踪点变量用于在目标跟踪点输出调试日志信息;
运行模块,用于运行程序;在程序运行中,跟踪点变量依次经过跟踪点集合中的各个跟踪点;
命令获取模块,用于获取调试命令,其中,调试命令用于指示目标跟踪点,以及打开目标跟踪点对应的调试开关;
输出模块,用于在目标跟踪点处输出调试日志信息。
上述技术方案中,利用配置模块、运行模块、命令获取模块和输出模块,实现了通过开关控制每一个跟踪点的日志输出功能,可以指定目标跟踪点输出调试日志信息,从而减少了其他日志信息的产生,保证可以获取到足够信息的同时又不会被大量日志信息所干扰,提高了程序性能,并且,提高了程序调试问题定位的效率。
在一些可选的实施方式中,配置模块还用于:通过宏定义,引入跟踪点变量。
上述技术方案中,利用配置模块采用宏定义,将跟踪点变量的定义转为自动完成,提高开发效率,降低维护难度。
在一些可选的实施方式中,配置模块还用于:将变量与变量对应的目标跟踪点、调试开关进行聚合操作,得到跟踪点变量;以及,初始化跟踪点变量的变量、目标跟踪点和调试开关。
上述技术方案中,利用配置模块采用宏定义,将变量与变量对应的目标跟踪点、调试开关进行聚合操作得到跟踪点变量的过程转为自动完成,提高开发效率,降低维护难度。
在一些可选的实施方式中,配置模块还用于:根据所有变量生成跟踪点集合,利用编译器将跟踪点集合放置于程序的跟踪段。
在一些可选的实施方式中,运行模块还用于:遍历程序的跟踪段,利用pcre(PerlCompatible Regular Expressions,正则表达)匹配的方式,匹配出目标跟踪点。
在一些可选的实施方式中,运行模块还用于:通过宏定义,配置跟踪点变量在每经过一个跟踪点时,跟踪点计数数组相应的位置计数加1;其中,每个线程分配N个跟踪点计数的数组,N为跟踪点集合中的跟踪点总数。
上述技术方案中,利用运行模块采用宏定义,用当前跟踪点的地址减去首个跟踪点的地址可计算出跟踪点下标,从而实现了对跟踪点的位置获取,自动形成跟踪点的计数规则。
在一些可选的实施方式中,命令获取模块还用于:利用宏定义,对调试开关的开启或关闭进行判断,并在目标跟踪点对应的调试开关被打开时,输出调试日志信息。
在一些可选的实施方式中,程序为C/C++程序,编译器为gcc编译器,宏定义为C/C++中宏定义。
上述技术方案中,针对C/C++程序,通过利用C/C++程序的宏定义和gcc编译器以及预设的一些控制命令逻辑,实现了一种可集成到程序中的跟踪调试方法,既能达到变量计数跟踪调试的高性能,又实现了日志信息的详细输出,并且提高了开发效率,降低了维护难度。
本申请实施例提供的一种电子设备,包括:处理器和存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述机器可读指令被所述处理器执行时执行如以上任一所述的方法。
本申请实施例提供的一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行以上任一项的方法。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种跟踪调试方法的步骤流程图;
图2为本申请实施例提供的一种跟踪调试方法的工作流程图;
图3为本申请实施例提供的一种跟踪调试***的功能模块图;
图4为本申请实施例提供的电子设备的结构示意图。
图标:1-配置模块,2-运行模块,3-命令获取模块,4-输出模块,51-处理器,52-存储器,53-通信接口,54-通信总线。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
变量计数跟踪调试方案使用计数的方式跟踪程序中的流程,该技术预先为每个需要跟踪的点定义对应的变量及名字,程序每次运行到对应位置,就对对应变量执行加一操作。最后,该技术通过命令行对所有的变量名称和值进行输出,即可得到一种程序流程跟踪方式。这种方式只需在主要流程及异常流程增加对应的跟踪点,就可以快速定位出程序异常的情况。
通过预定义变量来实现的代码跟踪调试方法性能非常高,但每增加一个跟踪点,就需要增加相关变量的定义、使用、统计及输出代码,维护成本高,并且由于缺少更具体数据的输出,使用场景有限。
日志记录也是开发人员常用的调试方法。在linux开发环境中,将带有众多变量的结构体直接打印到日志文件中比使用gdb调试器更方便。此外,通过打印日志可以很清晰地观察到函数的执行顺序。
申请人经研究发现,通过记录日志文件的方式进行调试,能解决变量计数跟踪调试方案中数据输出不丰富的情况,但是由于记录日志文件会对性能产生很大的影响,因此在对性能敏感的场景下并不适用,例如网络设备。此外,在事务交易非常频繁的场景下,该调试方法产生的大量日志也会影响问题调试定位的效率。
因此,本申请实施例提供了一种跟踪调试方法、***及计算机可读存储介质,可以指定目标跟踪点输出调试日志信息,从而减少了其他日志信息的产生,保证可以获取到足够信息的同时又不会被大量日志信息所干扰,提高了程序性能,并且,提高了程序调试问题定位的效率。
请参照图1,图1为本申请实施例提供的一种跟踪调试方法的步骤流程图,包括:
步骤101、配置程序中的跟踪点变量;其中,跟踪点变量用于在目标跟踪点输出调试日志信息;
步骤102、运行程序;在程序运行中,跟踪点变量依次经过跟踪点集合中的各个跟踪点;
步骤103、获取调试命令,其中,调试命令用于指示目标跟踪点,以及打开目标跟踪点对应的调试开关;
步骤104、在目标跟踪点处输出调试日志信息。
本申请实施例中,预先定义了跟踪点集合中的各个跟踪点,程序依次经过各个跟踪点,再配置在目标跟踪点输出调试日志信息的跟踪点变量,通过调试命令来打开目标跟踪点对应的调试开关,通过开关控制每一个跟踪点的日志输出功能,可以指定目标跟踪点输出调试日志信息,从而减少了其他日志信息的产生,保证可以获取到足够信息的同时又不会被大量日志信息所干扰。因此,本申请采用的变量计数跟踪,在程序运行流程中,可以快速定位异常信息,提高了程序调试问题定位的效率,并且,能够降低记录日志文件对程序性能的影响。
在一些可选的实施方式中,在配置程序中的跟踪点变量之前,还包括:通过宏定义,引入跟踪点变量。本申请实施例中,通过宏定义,将跟踪点变量的定义转为自动完成,提高开发效率,降低维护难度。
在一些可选的实施方式中,通过宏定义,引入跟踪点变量,包括:将变量与变量对应的目标跟踪点、调试开关进行聚合操作,得到跟踪点变量。
相应的,配置程序中的跟踪点变量,包括:初始化跟踪点变量的变量、目标跟踪点和调试开关。
本申请实施例中,通过宏定义,将变量与变量对应的目标跟踪点、调试开关进行聚合操作得到跟踪点变量的过程转为自动完成,提高开发效率,降低维护难度。
在一些可选的实施方式中,在运行程序之前,还包括:根据所有变量生成跟踪点集合,利用编译器将跟踪点集合放置于程序的跟踪段。
在一些可选的实施方式中,调试命令,还用于:遍历程序的跟踪段,利用pcre匹配的方式,匹配出目标跟踪点。
在一些可选的实施方式中,运行程序,跟踪点变量依次经过跟踪点集合中的各个跟踪点,包括:通过宏定义,配置跟踪点变量在每经过一个跟踪点时,跟踪点计数数组相应的位置计数加1;其中,每个线程分配N个跟踪点计数的数组,N为跟踪点集合中的跟踪点总数。
本申请实施例中,采用宏定义,用当前跟踪点的地址减去首个跟踪点的地址可计算出跟踪点下标,从而实现了对跟踪点的位置获取,自动形成跟踪点的计数规则。
在一些可选的实施方式中,还包括:利用宏定义,对调试开关的开启或关闭进行判断,并在目标跟踪点对应的调试开关被打开时,输出调试日志信息。
在一些可选的实施方式中,程序为C/C++程序,编译器为gcc编译器,宏定义为C/C++中宏定义。本申请实施例中,针对C/C++程序,通过利用C/C++程序的宏定义和gcc编译器以及预设的一些控制命令逻辑,实现了一种可集成到程序中的跟踪调试方法,既能达到变量计数跟踪调试的高性能,又实现了日志信息的详细输出,并且提高了开发效率,降低了维护难度。
请参照图2,图2为本申请实施例提供的一种跟踪调试方法的工作流程图,具体的实施过程分为跟踪点资源初始化和跟踪点计数统计及输出两个主要阶段。
步骤201-202为跟踪点资源初始化阶段:
步骤201、程序初始化,获取跟踪点集合中跟踪点总数N。
在程序跟踪点调用trace(x,fmt…)宏定义接口,自动完成变量定义、聚合以及增加程序跟踪代码;在程序初始化中遍历,计算出跟踪点总数量N;
其中,宏定义接口伪代码如下:
步骤202、线程初始化,分配大小为N的数组作为跟踪点计数数组。
在线程初始化时,为每个线程集中分配N个计数变量的数组,作为跟踪点计数集。
步骤203-204为跟踪点计数统计及输出阶段:
步骤203、跟踪点变量对应的位置计数+1,获取跟踪点变量的位置。
在程序运行时,根据跟踪点变量在跟踪点集合的出现位置,计算其对应计数变量的位置,并对计数加一;
同时,获取跟踪点变量的位置,因为所有跟踪点名字都位于.trace段(即跟踪段)中,用当前跟踪点的地址减去首个跟踪点的地址可计算出跟踪点下标。
步骤204、根据目标跟踪点打开调试开关,输出调试信息。
根据目标跟踪点打开对应的调试开关,因为所有跟踪点名字都位于.trace段中,通过cli命令遍历.trace段,对目标跟踪点进行pcre匹配。满足条件的所有跟踪点的调试开关都将被打开。通过cli命令根据目标来开启调试开关,精准输出对应调试点的打印信息,输出调试信息时,程序自动进行多线程计数变量合并及展示操作。
本申请实施例中,利用C/C++编译器变量聚合功能以及宏定义语法,并通过对数据存储进行设计,将变量的定义、使用、统计及输出代码的逻辑直接转为自动完成。本发明可对所有跟踪点计数变量进行统计、输出,快速定位大部分问题。通过提供统一的cli日志输出开关命令,使用者可以根据目标跟踪点名字按需打开调试开关,从而精准控制每一个跟踪点的日志输出,降低信息干扰,提高调试效率。因此,本申请实施例的跟踪调试方法,按需输出调试日志,提升开发和调试效率,具有性能高,易于扩展和维护的优点。
请参照图3,图3为本申请实施例提供的一种跟踪调试***的功能模块图,包括配置模块1、运行模块2、命令获取模块3和输出模块4。
其中,配置模块1,用于配置程序中的跟踪点变量;其中,跟踪点变量用于在目标跟踪点输出调试日志信息。运行模块2,用于运行程序;在程序运行中,跟踪点变量依次经过跟踪点集合中的各个跟踪点。命令获取模块3,用于获取调试命令,其中,调试命令用于指示目标跟踪点,以及打开目标跟踪点对应的调试开关。输出模块4,用于在目标跟踪点处输出调试日志信息。
本申请实施例中,利用配置模块1、运行模块2、命令获取模块3和输出模块4,实现了通过开关控制每一个跟踪点的日志输出功能,可以指定目标跟踪点输出调试日志信息,从而减少了其他日志信息的产生,保证可以获取到足够信息的同时又不会被大量日志信息所干扰,提高了程序性能,并且,提高了程序调试问题定位的效率。
在一些可选的实施方式中,配置模块1还用于:通过宏定义,引入跟踪点变量。
本申请实施例中,利用配置模块1采用宏定义,将跟踪点变量的定义转为自动完成,提高开发效率,降低维护难度。
在一些可选的实施方式中,配置模块1还用于:将变量与变量对应的目标跟踪点、调试开关进行聚合操作,得到跟踪点变量;以及,初始化跟踪点变量的变量、目标跟踪点和调试开关。
本申请实施例中,利用配置模块1采用宏定义,将变量与变量对应的目标跟踪点、调试开关进行聚合操作得到跟踪点变量的过程转为自动完成,提高开发效率,降低维护难度。
在一些可选的实施方式中,配置模块1还用于:根据所有变量生成跟踪点集合,利用编译器将跟踪点集合放置于程序的跟踪段。
在一些可选的实施方式中,运行模块2还用于:遍历程序的跟踪段,利用pcre(PerlCompatible Regular Expressions,正则表达)匹配的方式,匹配出目标跟踪点。
在一些可选的实施方式中,运行模块2还用于:通过宏定义,配置跟踪点变量在每经过一个跟踪点时,跟踪点计数数组相应的位置计数加1;其中,每个线程分配N个跟踪点计数的数组,N为跟踪点集合中的跟踪点总数。
本申请实施例中,利用运行模块2采用宏定义,用当前跟踪点的地址减去首个跟踪点的地址可计算出跟踪点下标,从而实现了对跟踪点的位置获取,自动形成跟踪点的计数规则。
在一些可选的实施方式中,命令获取模块3还用于:利用宏定义,对调试开关的开启或关闭进行判断,并在目标跟踪点对应的调试开关被打开时,输出调试日志信息。
在一些可选的实施方式中,程序为C/C++程序,编译器为gcc编译器,宏定义为C/C++中宏定义。
本申请实施例中,针对C/C++程序,通过利用C/C++程序的宏定义和gcc编译器以及预设的一些控制命令逻辑,实现了一种可集成到程序中的跟踪调试方法,既能达到变量计数跟踪调试的高性能,又实现了日志信息的详细输出,并且提高了开发效率,降低了维护难度。
图4示出了本申请实施例提供的电子设备的一种可能的结构。参照图3,电子设备包括:处理器51、存储器52和通信接口53,这些组件通过通信总线54和/或其他形式的连接机构(未示出)互连并相互通讯。
其中,存储器52包括一个或多个(图中仅示出一个),其可以是,但不限于,随机存取存储器(Random Access Memory,简称RAM),只读存储器(Read Only Memory,简称ROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),电可擦除可编程只读存储器(Electric Erasable Programmable Read-Only Memory,简称EEPROM)等。处理器51以及其他可能的组件可对存储器52进行访问,读和/或写其中的数据。
处理器51包括一个或多个(图中仅示出一个),其可以是一种集成电路芯片,具有信号的处理能力。上述的处理器51可以是通用处理器,包括中央处理器(CentralProcessing Unit,简称CPU)、微控制单元(Micro Controller Unit,简称MCU)、网络处理器(Network Processor,简称NP)或者其他常规处理器;还可以是专用处理器,包括神经网络处理器(Neural-network Processing Unit,简称NPU)、图形处理器(Graphics ProcessingUnit,简称GPU)、数字信号处理器(Digital Signal Processor,简称DSP)、专用集成电路(Application Specific Integrated Circuits,简称ASIC)、现场可编程门阵列(FieldProgrammable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。并且,在处理器51为多个时,其中的一部分可以是通用处理器,另一部分可以是专用处理器。
通信接口53包括一个或多个(图中仅示出一个),可以用于和其他设备进行直接或间接地通信,以便进行数据的交互。通信接口53可以包括进行有线和/或无线通信的接口。
在存储器52中可以存储一个或多个计算机程序指令,处理器51可以读取并运行这些计算机程序指令,以实现本申请实施例提供的方法。
可以理解的,图4所示的结构仅为示意,电子设备还可以包括比图3中所示更多或者更少的组件,或者具有与图4所示不同的结构。图4中所示的各组件可以采用硬件、软件或其组合实现。电子设备可能是实体设备,例如PC机、笔记本电脑、平板电脑、手机、服务器、嵌入式设备等,也可能是虚拟设备,例如虚拟机、虚拟化容器等。并且,电子设备也不限于单台设备,也可以是多台设备的组合或者大量设备构成的集群。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令被计算机的处理器读取并运行时,执行本申请实施例提供的方法。例如,计算机可读存储介质可以实现:配置程序中的跟踪点变量;其中,跟踪点变量用于在目标跟踪点输出调试日志信息;运行程序;在程序运行中,跟踪点变量依次经过跟踪点集合中的各个跟踪点;获取调试命令,其中,调试命令用于指示目标跟踪点,以及打开目标跟踪点对应的调试开关;在目标跟踪点处输出调试日志信息。计算机可读存储介质也可以实现为图4中电子设备中的存储器52。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种跟踪调试方法,其特征在于,包括:
配置程序中的跟踪点变量;其中,所述跟踪点变量用于在目标跟踪点输出调试日志信息;
运行所述程序;在所述程序运行中,所述跟踪点变量依次经过跟踪点集合中的各个跟踪点;
获取调试命令,其中,所述调试命令用于指示所述目标跟踪点,以及打开所述目标跟踪点对应的调试开关;
在所述目标跟踪点处输出所述调试日志信息。
2.如权利要求1所述的方法,其特征在于,在所述配置程序中的跟踪点变量之前,还包括:
通过宏定义,引入所述跟踪点变量。
3.如权利要求2所述的方法,其特征在于,所述通过宏定义,引入所述跟踪点变量,包括:
将变量与变量对应的目标跟踪点、调试开关进行聚合操作,得到跟踪点变量;
所述配置程序中的跟踪点变量,包括:
初始化所述跟踪点变量的变量、目标跟踪点和调试开关。
4.如权利要求3所述的方法,其特征在于,在所述运行所述程序之前,还包括:
根据所有变量生成跟踪点集合,利用编译器将跟踪点集合放置于程序的跟踪段。
5.如权利要求4所述的方法,其特征在于,所述调试命令,还用于:
遍历所述程序的跟踪段,利用pcre匹配的方式,匹配出所述目标跟踪点。
6.如权利要求4所述的方法,其特征在于,所述运行程序,所述跟踪点变量依次经过跟踪点集合中的各个跟踪点,包括:
通过宏定义,配置跟踪点变量在每经过一个跟踪点时,跟踪点计数数组相应的位置计数加1;其中,每个线程分配N个跟踪点计数的数组,N为跟踪点集合中的跟踪点总数。
7.如权利要求4所述的方法,其特征在于,还包括:
利用宏定义,对调试开关的开启或关闭进行判断,并在所述目标跟踪点对应的调试开关被打开时,输出所述调试日志信息。
8.如权利要求4-7任一项所述的方法,其特征在于,所述程序为C/C++程序,所述编译器为gcc编译器,所述宏定义为C/C++中宏定义。
9.一种跟踪调试***,其特征在于,包括:
配置模块,用于配置程序中的跟踪点变量;其中,所述跟踪点变量用于在目标跟踪点输出调试日志信息;
运行模块,用于运行所述程序;在所述程序运行中,所述跟踪点变量依次经过跟踪点集合中的各个跟踪点;
命令获取模块,用于获取调试命令,其中,所述调试命令用于指示所述目标跟踪点,以及打开所述目标跟踪点对应的调试开关;
输出模块,用于在所述目标跟踪点处输出所述调试日志信息。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令被处理器读取并运行时,执行如权利要求1-8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111529106.7A CN114238107A (zh) | 2021-12-14 | 2021-12-14 | 一种跟踪调试方法、***及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111529106.7A CN114238107A (zh) | 2021-12-14 | 2021-12-14 | 一种跟踪调试方法、***及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114238107A true CN114238107A (zh) | 2022-03-25 |
Family
ID=80755979
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111529106.7A Pending CN114238107A (zh) | 2021-12-14 | 2021-12-14 | 一种跟踪调试方法、***及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114238107A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117370214A (zh) * | 2023-12-01 | 2024-01-09 | 珠海格力电器股份有限公司 | 一种控制器的程序调试方法、装置和存储介质 |
-
2021
- 2021-12-14 CN CN202111529106.7A patent/CN114238107A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117370214A (zh) * | 2023-12-01 | 2024-01-09 | 珠海格力电器股份有限公司 | 一种控制器的程序调试方法、装置和存储介质 |
CN117370214B (zh) * | 2023-12-01 | 2024-04-19 | 珠海格力电器股份有限公司 | 一种控制器的程序调试方法、装置和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210064512A1 (en) | Selective memory tracing of program execution | |
CN104750603B (zh) | 一种多核dsp软件仿真器及其物理层软件测试方法 | |
US9176848B2 (en) | Program debugger and program debugging | |
CN110741354A (zh) | 呈现代码实体调用之间的差异 | |
US20120131559A1 (en) | Automatic Program Partition For Targeted Replay | |
US20150006961A1 (en) | Capturing trace information using annotated trace output | |
CN107025167B (zh) | 在处理器追踪日志中使用编译器类型信息进行数据流分析的方法和设备 | |
WO2016095570A1 (zh) | 一种嵌入式***的调试方法及装置、存储介质 | |
US8930923B2 (en) | Generating debugging extension source code utilizing debugging information | |
CN111813672B (zh) | 一种针对多种处理器架构的非侵入式覆盖率统计方法 | |
CN115061837B (zh) | 一种调度跟踪和获取用户空间调用栈的方法和装置 | |
CN109542444B (zh) | Java应用的监控方法、装置、服务器和存储介质 | |
CN105824750B (zh) | 一种在NorFlash程序空间调试的软断点模拟方法 | |
CN106502695A (zh) | 一种基于嵌入式软件开发方法 | |
CN112230904A (zh) | 基于接口文档的代码生成方法、装置、存储介质及服务器 | |
CN114238107A (zh) | 一种跟踪调试方法、***及计算机可读存储介质 | |
EP3915018A1 (en) | Dynamic diagnostic code instrumentation over a historic program execution | |
CN102331961B (zh) | 并行模拟多个处理器的方法及***、调度器 | |
US10289219B2 (en) | Communicating with an unsupported input device | |
EP3921734B1 (en) | Using historic execution data to visualize tracepoints | |
US20180260306A1 (en) | Unexpected Path Debugging | |
CN112445855A (zh) | 用于图形处理器芯片的可视化分析方法和可视化分析装置 | |
CN112861138A (zh) | 软件安全性分析方法及分析装置、电子设备及存储介质 | |
CN116662134A (zh) | 一种基于eBPF的Linux内核性能追踪工具 | |
CN112740187A (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 |