反向调试方法、调试方法、计算设备及存储介质技术

技术编号:38921914 阅读:16 留言:0更新日期:2023-09-25 09:32
本发明专利技术公开了一种反向调试方法、调试方法、计算设备及存储介质,反向调试方法包括:响应于被调试程序运行过程中触发的事件,生成所述事件对应的转储文件,以记录所述被调试程序在所述事件触发的时间点的运行状态;根据所述转储文件,对所述被调试程序在所述事件触发的时间点的运行状态进行回放,以便确定所述被调试程序的故障。根据本发明专利技术的技术方案,实现了事件级的反向调试,提高了对程序进行故障诊断的效率,可以更准确地定位程序问题。可以更准确地定位程序问题。可以更准确地定位程序问题。

【技术实现步骤摘要】
反向调试方法、调试方法、计算设备及存储介质


[0001]本专利技术涉及调试
,尤其涉及一种反向调试方法、调试方法、计算设备及存储介质。

技术介绍

[0002]集成开发环境(IDE,Integrated Development Environment)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。其中集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。
[0003]当前技术背景下,IDE的功能越来越强大,而作为IDE核心功能的代码调试功能却长时间没有更迭。目前主流的调试功能包括调试程序的启动、运行、断点命中、单步执行等,功能已逐渐固化。而针对程序崩溃后如何进行问题追踪,以及如何对程序运行后的代码分析缺少相应的支持。
[0004]现有技术中,QtCreator、Visual Studio虽然具备反向调试能力,且都是基于调试器提供的反向调试功能实现,原理是通过GDB对部分代码进行record操作,记录下代码运行状态,在反向调试时恢复这些状态数据,从而实现程序的逆序执行。该调试方式是手动的,需要用户确定要记录的代码片段,手动记录要调试的代码片段,无法做到自动触发记录,并且,无法针对系统调用事件、x11事件、D

Bus事件等进行record,从而无法实现事件级的反向调试功能。另外,GDB只能针对当前程序的运行状态进行record,并没有针对这些记录做时间维度的组织,从而缺少时间维度的记录,此外,通过GDB只能记录连续的代码片段,无法离散在程序的不同位置进行记录。
[0005]鉴于此,需要一种调试方法,以解决上述技术方案中存在的问题。

技术实现思路

[0006]为此,本专利技术提供一种反向调试方法及调试方法,以解决或至少缓解上面存在的问题。
[0007]根据本专利技术的一个方面,提供一种反向调试方法,包括:响应于被调试程序运行过程中触发的事件,生成所述事件对应的转储文件,以记录所述被调试程序在所述事件触发的时间点的运行状态;根据所述转储文件,对所述被调试程序在所述事件触发的时间点的运行状态进行回放,以便确定所述被调试程序的故障。
[0008]可选地,根据本专利技术的反向调试方法,所述事件包括系统调用事件;响应于被调试程序运行过程中触发的事件,生成所述事件对应的转储文件,以记录所述被调试程序在所述事件触发的时间点的运行状态,包括:通过反向调试进程创建一个子进程;在所述子进程中启动被调试程序,以便所述被调试程序覆盖所述子进程;对所述子进程进行监控,以实现监控所述被调试程序;响应于所述子进程运行过程中触发的系统调用事件,生成所述系统调用事件对应的转储文件,以记录所述被调试程序在所述系统调用事件触发的时间点的运行状态。
[0009]可选地,根据本专利技术的反向调试方法,在通过反向调试进程创建一个子进程之后,还包括:获取所述子进程的进程号;对所述子进程进行监控,包括:调用ptrace函数并传入所述子进程的进程号,来对所述子进程进行监控。
[0010]可选地,根据本专利技术的反向调试方法,在所述子进程中启动被调试程序,包括:在所述子进程中,利用execve函数启动被调试程序。
[0011]可选地,根据本专利技术的反向调试方法,生成所述事件对应的转储文件,包括:根据被调试程序运行过程中触发的多个事件,生成多个事件对应的转储文件,所述转储文件中包含多个事件数据;根据所述转储文件,对所述被调试程序在所述事件触发的时间点的运行状态进行回放,包括:读取所述转储文件中的事件数据;根据所述事件数据,对所述被调试程序在事件触发的时间点的运行状态进行回放。
[0012]可选地,根据本专利技术的反向调试方法,生成所述事件对应的转储文件,包括:获取所述事件触发的时间点的时间戳;基于所述时间戳生成所述事件对应的转储文件。
[0013]可选地,根据本专利技术的反向调试方法,还包括:将所述转储文件,基于对应的事件类型和时间戳进行存储,以便根据时间信息选择对应事件的转储文件。
[0014]可选地,根据本专利技术的反向调试方法,获取所述事件触发的时间点的时间戳,包括:利用虚拟动态库,获取所述事件触发的时间点的时间戳。
[0015]可选地,根据本专利技术的反向调试方法,所述事件包括D

Bus事件、窗口事件;所述方法还包括:通过LD_PRELOAD环境变量,捕获所述被调试程序运行过程中触发的D

Bus事件或窗口事件。
[0016]根据本专利技术的一个方面,提供一种调试方法,在前端执行,所述前端与后端通信连接,所述后端适于根据前文所述的反向调试方法,来生成被调试程序运行过程中触发的多个事件对应的转储文件;所述方法包括:读取转储文件,遍历所述转储文件中记录的各事件数据,所述事件数据包含事件的时间戳;根据各事件的时间戳,在时间轴上的对应位置绘制相应的事件标识线,以生成时间线并显示;响应于基于事件标识线触发的对事件的回放请求,获取对应的事件数据,根据所述事件数据进行回放操作,以获取被调试程序的调试信息。
[0017]可选地,根据本专利技术的调试方法,所述前端包括集成开发应用,所述集成开发应用中包括调试插件,所述调试插件适于经由调试适配器与所述后端的反向调试工具进行通信;根据所述事件数据进行回放操作,以获取被调试程序的调试信息,包括:通过调试插件,根据所述事件数据向调试适配器发送调试请求,以便经由所述调试适配器向所述反向调试工具请求运行被调试程序,所述反向调试工具适于在所述被调试程序运行至断点时向所述调试适配器发出停止信号;接收所述调试适配器根据所述停止信号封装生成的停止信号消息,根据所述停止信号消息命中断点;向调试适配器发送获取调试信息的请求,以便经由所述调试适配器从所述反向调试工具获取所述被调试程序的堆栈信息和变量值。
[0018]可选地,根据本专利技术的调试方法,所述事件数据包含内存快照数据;获取对应的事件数据,根据所述事件数据进行回放操作,以获取被调试程序的调试信息,包括:根据所述事件标识线对应的时间戳,从所述转储文件中获取对应的内存快照数据;对所述内存快照数据进行解压处理,得到内存快照文件;根据所述内存快照文件进行回放操作,以获取被调试程序的调试信息。
[0019]可选地,根据本专利技术的调试方法,根据所述内存快照文件进行回放操作,以获取被调试程序的调试信息,包括:通过调试插件,根据所述内存快照文件向调试适配器发送获取调试信息的请求,以便经由所述调试适配器从所述反向调试工具获取所述被调试程序的线程信息、堆栈信息和变量值。
[0020]可选地,根据本专利技术的调试方法,还包括:响应于对所述时间线的缩放请求,根据所述缩放请求确定步进值,并根据该步进值对所述时间线进行缩放。
[0021]可选地,根据本专利技术的调试方法,在遍历所述转储文件中记录的各事件数据之后,还包括:分别根据各事件数据的详细信息生成对应的事件条目;根据各事件条目生成事件列表并进行显示。
[0022]可选地,根据本专利技术本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种反向调试方法,包括:响应于被调试程序运行过程中触发的事件,生成所述事件对应的转储文件,以记录所述被调试程序在所述事件触发的时间点的运行状态;根据所述转储文件,对所述被调试程序在所述事件触发的时间点的运行状态进行回放,以便确定所述被调试程序的故障。2.如权利要求1所述的方法,其中,所述事件包括系统调用事件;响应于被调试程序运行过程中触发的事件,生成所述事件对应的转储文件,以记录所述被调试程序在所述事件触发的时间点的运行状态,包括:通过反向调试进程创建一个子进程;在所述子进程中启动被调试程序,以便所述被调试程序覆盖所述子进程;对所述子进程进行监控,以实现监控所述被调试程序;响应于所述子进程运行过程中触发的系统调用事件,生成所述系统调用事件对应的转储文件,以记录所述被调试程序在所述系统调用事件触发的时间点的运行状态。3.如权利要求1或2所述的方法,其中,生成所述事件对应的转储文件,包括:根据被调试程序运行过程中触发的多个事件,生成多个事件对应的转储文件,所述转储文件中包含多个事件数据;根据所述转储文件,对所述被调试程序在所述事件触发的时间点的运行状态进行回放,包括:读取所述转储文件中的事件数据;根据所述事件数据,对所述被调试程序在事件触发的时间点的运行状态进行回放。4.如权利要求1

3中任一项所述的方法,其中,生成所述事件对应的转储文件,包括:获取所述事件触发的时间点的时间戳;基于所述时间戳生成所述事件对应的转储文件。5.一种调试方法,在前端执行,所述前端与后端通信连接,所述后端适于根据如权利要求1

4中任一项所述的方法,来生成被调试程序运行过程中触发的多个事件对应的转储文件;所述方法包括:读取转储文件,遍历所述转储文件中记录的各事件数据,所述事件数据包含事件的时间戳;根据各事件的时间戳,在时间轴上的对应位置绘制相应的事件标识线,以生成时间线并显示;响应于基于事件标识线触发的对事件的回放请求,获取对应的事件数据,根据所述事件数据进行回放操作,以获取被调试程序的调试信息。6.如权利要求5所述的方法,其中,所述前端包括集成开发应用,所述集成开发应用中包括调试插件,所述调试插件适于经由调试适配器与所述后端的反向调试工具进行通信;根据所述事件数据进行回放操作,以获取被调试程序的调试信息,包括:通过调试插件,根据所述事件数据向调试适配器发送调试请求,以便经由所述调试适配...

【专利技术属性】
技术研发人员:卢桢
申请(专利权)人:统信软件技术有限公司
类型:发明
国别省市:

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

1