一种用于集成开发环境的C程序动态追踪方法及系统技术方案

技术编号:34432952 阅读:23 留言:0更新日期:2022-08-06 16:12
本发明专利技术涉及一种用于集成开发环境的C程序动态追踪方法及系统,系统可以为插件形式,也可以集成到开发环境中,包括选择函数模块、追踪程序代码生成模块、开始追踪模块、结束追踪模块;方法包括:步骤S1:通过选择函数模块,选择C程序源代码中所有要被追踪函数;步骤S2:通过追踪程序代码生成模块,生成基于eBPF/BCC编译链的追踪代码;步骤S3:通过开始追踪模块,执行追踪程序,实时输出被追踪函数的调用信息;步骤S4:通过结束追踪模块,结束追踪程序,输出所有被追踪函数的汇总信息。本发明专利技术用来自动生成基于eBPF/BCC的动态追踪程序,降低追踪程序编写的复杂性,有利于开发者追踪函数调用过程及性能分析。及性能分析。及性能分析。

【技术实现步骤摘要】
一种用于集成开发环境的C程序动态追踪方法及系统


[0001]本专利申请属于程序动态追踪
,更具体地说,是涉及一种用于集成开发环境的C程序动态追踪方法及系统。

技术介绍

[0002]在Linux操作系统下,程序追踪是一种调试、分析应用程序执行状态的手段,在不影响正常程序执行逻辑的前提下获取程序的被追踪点的信息。C应用程序追踪一般包含USDT用户静态追踪、基于uprobe、uretprobe动态追踪或采用eBPF技术的方式。采用USDT方式需要在源代码中加入追踪点,源代码和追踪程序耦合性比较高,每次修改追踪点都需要对源代码改动并重新编译;直接使用Linux内核中的uprobe、uretprobe追踪应用程序需要编写对应的内核模块,复杂性高并且可移植性比较差。
[0003]eBPF是Linux操作系统下的一个通用执行引擎,全称“扩展的伯克利数据包过滤器 (Extended Berkeley Packet Filter)”,它是一种数据包过滤技术,是安全、网络、负载均衡、故障分析、追踪等领域的主战场,可基于此引擎开发性能分析、观测程序,被应用于Linux内核、应用程序的观测及网络等诸多场景,降低了开发者对于应用程序追踪的难度,也有很好的可移植性,但直接编写eBPF程序仍具有一定的复杂性。
[0004]Linux内核一直是实现监视/可观察性,网络和安全性的理想场所。不幸的是,这通常是不切实际的,因为它需要更改内核源代码或加载内核模块,并导致彼此堆叠的抽象层。 eBPF是一项革命性的技术,可以在Linux内核中运行沙盒程序,而无需更改内核源代码或加载内核模块。通过使Linux内核可编程,基础架构软件可以利用现有的层,从而使它们更加智能和功能丰富,而无需继续为系统增加额外的复杂性层。
[0005]BCC是用于创建基于eBPF的高效内核跟踪和操作程序的工具包,也即使用BCC开发eBPF程序,通常命名为eBPF/BCC,其中包括一些有用的命令行工具和示例。bcc是eBPF的一种前端,当然这个前端特别地简单好用。可以直接在python里面嵌入通过C语言写的BPF程序,并帮忙产生BPF bytecode和load进入kernel挂载kprobe、tracepoints等上面执行。之后,还可以从python取出来C函数里面导出的maps数据以及perf

event数据并进行打印。相关介绍参见https://www.cnblogs.com/AIPAOJIAO/p/14017402.html。
[0006]BCC简化了用C进行内核检测的eBPF程序的编写,包括LLVM的包装器以及Python和Lua的前端。它还提供了用于直接集成到应用程序中的高级库。
[0007]针对上述问题,需要设计一种方便开发者直接用来追踪C应用程序的方法及系统,用来生成C程序源代码中被追踪函数的追踪程序,开发者可以直接用来分析函数执行过程对被追踪函数的性能分析,以解决实现追踪程序的复杂性和移植困难的问题。

技术实现思路

[0008]本专利技术需要解决的技术问题是提供一种用于集成开发环境的C程序动态追踪方法及系统,用来自动生成基于eBPF/BCC的动态追踪程序,降低追踪程序编写的复杂性,有利于
开发者追踪函数调用过程及性能分析。
[0009]为了解决上述问题,本专利技术所采用的技术方案是:一种C程序动态追踪系统,位于C程序源代码中,该C程序动态追踪系统可以为插件形式,也可以集成到开发环境中,包括选择函数模块、追踪程序代码生成模块、开始追踪模块、结束追踪模块,用于实现选择被追踪函数、生成追踪程序的代码、开始追踪、结束追踪的功能。
[0010]选择函数模块,选择被追踪函数;追踪程序代码生成模块,根据选择的被追踪函数,生成追踪程序代码;开始追踪模块,根据追踪程序代码,执行追踪程序;结束追踪模块,根据追踪程序代码,结束追踪程序。
[0011]一种用于集成开发环境的C程序动态追踪方法,利用了上述的一种C程序动态追踪系统,包括以下步骤,步骤S1:通过选择函数模块,选择C程序源代码中所有被追踪函数;步骤S2:根据选择的上述所有被追踪函数,通过追踪程序代码生成模块,生成基于eBPF/BCC编译链的追踪代码,进而生成追踪程序;步骤S3:通过开始追踪模块,执行追踪程序,实时输出被追踪函数的调用信息;步骤S4:通过结束追踪模块,结束追踪程序,输出所有被追踪函数的汇总信息。
[0012]进一步,步骤S1具体包括,步骤S11:开发者在集成开发环境中打开C程序源代码,激活C程序动态追踪系统;步骤S12:打开选择被追踪函数的对话框,选择需要的被追踪函数;步骤S13:保存步骤S12中被追踪函数的函数名、返回值类型、参数类型及参数顺序。
[0013]进一步,步骤S2具体包括,步骤S21:开发者在当前打开的C程序项目中生成追踪程序;步骤S22:C程序动态追踪系统解析所有被保存的被追踪函数的函数信息,自动生成基于eBPF/BCC编译链的C代码和Python代码并保存。
[0014]进一步,步骤S22中,生成的C代码实现被追踪函数的uprobe Hook 函数、uretprobe Hook 函数,上述uprobe Hook 函数、uretprobe Hook 函数获取被追踪函数的进程PID、TGID、进程名、开始执行时间、函数参数、被追踪函数的返回时间、被追踪函数的返回值信息;生成的Python代码负责注册被追踪函数的uprobe Hook 函数、uretprobe Hook函数,并不断获取上述被追踪函数的调用信息;追踪程序中的C代码最终被编译为BPF字节码,追踪程序作为用户态程序,通过Perf Event机制获取上述被追踪函数的调用信息。
[0015]进一步,步骤S3具体包括,步骤S31:执行C程序源代码编译后的应用程序后,开发者在集成开发环境中选择开启追踪,自动执行追踪程序并打开终端;步骤S32:终端中实时输出被追踪函数的调用信息。进一步,步骤S32中,终端中实时输出被追踪函数的调用信息,上述调用信息包含进程PID、TGID、进程名、开始执行时间、函数参数、被追踪函数的返回时间、被追踪函数的返
回值,同时C程序动态追踪系统将上述调用信息保存到文件中。
[0016]进一步,步骤S4具体包括,步骤S41:开发者在集成开发环境中选择结束追踪,追踪程序退出;步骤S42:C程序动态追踪系统分析被保存的调用信息,在终端中输出所有被追踪过程中的调用信息汇总。
[0017]进一步,步骤S42,获取每个被追踪函数的调用次数、平均耗时,最后在终端中按顺序依次显示被追踪函数的函数名、被调用次数、平均耗时、进程PID、TGID、进程名。
[0018]进一步,在终端中按被调用次数顺序依次显示被追踪函数的函数名、被调用次数、平均耗时、进程PID、TGID、进程名。
[0019]由于采用了上述技术方案,本专利技术取得的有益效果是:该用于集成开发环境的C程序动态追踪方法,与现有的C程序动态追踪方法相比本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种C程序动态追踪系统,位于C程序源代码中,其特征在于:包括选择函数模块、追踪程序代码生成模块、开始追踪模块、结束追踪模块,选择函数模块,选择被追踪函数;追踪程序代码生成模块,根据选择的被追踪函数,生成追踪程序代码;开始追踪模块,根据追踪程序代码,执行追踪程序;结束追踪模块,根据追踪程序代码,结束追踪程序。2.一种用于集成开发环境的C程序动态追踪方法,利用了权利要求1所述的一种C程序动态追踪系统,其特征在于:包括以下步骤,步骤S1:通过选择函数模块,选择C程序源代码中所有被追踪函数;步骤S2:根据选择的上述所有被追踪函数,通过追踪程序代码生成模块,生成基于eBPF/BCC编译链的追踪代码,进而生成追踪程序;步骤S3:通过开始追踪模块,执行追踪程序,实时输出被追踪函数的调用信息;步骤S4:通过结束追踪模块,结束追踪程序,输出所有被追踪函数的汇总信息。3.根据权利要求2所述的一种用于集成开发环境的C程序动态追踪方法,其特征在于:步骤S1具体包括,步骤S11:开发者在集成开发环境中打开C程序源代码,激活C程序动态追踪系统;步骤S12:打开选择被追踪函数的对话框,选择需要的被追踪函数;步骤S13:保存步骤S12中选中的被追踪函数的函数名、返回值类型、参数类型及参数顺序。4.根据权利要求2所述的一种用于集成开发环境的C程序动态追踪方法,其特征在于:步骤S2具体包括,步骤S21:开发者在当前打开的C程序项目中生成追踪程序;步骤S22:C程序动态追踪系统解析所有被保存的被追踪函数的函数信息,自动生成基于eBPF/BCC编译链的C代码和Python代码并保存。5.根据权利要求4所述的一种用于集成开发环境的C程序动态追踪方法,其特征在于:步骤S22中,生成的C代码实现被追踪函数的uprobe Hook 函数、uretprobe Hook 函数,上述uprobe Hook 函数、uretprobe Hook 函数...

【专利技术属性】
技术研发人员:马春雨刘步权穆瑞超吴春光齐璇战茅徐虹丁丽丽王鹏龙
申请(专利权)人:麒麟软件有限公司
类型:发明
国别省市:

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

1