[发明专利]记录C语言函数调用链的方法及C语言通用日志框架在审
申请号: | 201910413980.0 | 申请日: | 2019-05-17 |
公开(公告)号: | CN110134385A | 公开(公告)日: | 2019-08-16 |
发明(设计)人: | 臧虎;王仁重 | 申请(专利权)人: | 中国农业银行股份有限公司 |
主分类号: | G06F8/30 | 分类号: | G06F8/30 |
代理公司: | 北京集佳知识产权代理有限公司 11227 | 代理人: | 赵兴华;王宝筠 |
地址: | 100005 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 日志 目标线 函数调用 消息队列 异常消息 记录 调用链 错误描述 定位程序 定位信息 目标函数 完整记录 线程标识 异常捕获 异常定位 异常发生 异常信息 通用 返回 错误码 框架本 末尾 线程 调用 上层 查找 传递 阅读 | ||
本发明提供记录C语言函数调用链的方法及C语言通用日志框架,以提供精确的异常定位信息。在本发明实施例中,目标函数在向上层调用者返回包含错误码的返回值之前,会查找出所属线程的线程标识(目标线程标识),并将包含错误描述的异常消息插入目标线程标识所对应的消息队列的末尾。这样,在沿函数调用链反向传递过程中,每一涉及的函数都会将相应的异常消息插入目标线程标识所对应的消息队列,这样实现了逐层记录异常信息的异常捕获和记录,能够完整记录异常发生时刻的函数调用链,从而可提供精确的定位信息,显著提高了日志阅读者通过日志定位程序问题的速度和准确性。
技术领域
本发明涉及计算机领域,特别涉及记录C语言函数调用链的方法及C语言通用日志框架。
背景技术
在系统故障诊断时,技术人员的首要任务是分析和定位问题发生原因,其中最为重要的就是定位引发系统异常的指令在系统程序源码中的位置(是哪一行代码)以及找到异常发生时程序正在处理的数据内容,而这两点也是日志需要记录的关键信息。
现有的一些大型开源C语言项目中的日志模块在系统发生异常时,大都只记录开发者预定义好的某个错误码,如果技术人员希望获取异常发生时更详细的信息,通行的做法是去分析操作系统内核日志和程序异常退出留下的Core文件(如果有的话),这显然非常不利于异常问题的快速分析和定位。
现代程序设计中,一个系统一般由多个模块组成,每个模块对外提供一组能够实现某些特定功能的接口方法。具体到C语言程序设计,这些接口方法就是模块所提供的函数。当系统要执行一个业务操作时,往往需要调用到自身若干个模块的多个接口方法,调用关系呈现出一种链式的结构,例如图1a所示的调用关系:
交易A调用接口被调用后,内部会依次调用业务逻辑模块的三个函数“发送交易请求消息”、“接收交易返回消息”和“解析交易返回结果”三个函数,而这三个函数中的前两个,又分别需要调用网络通讯模块中的“组装HTTP请求报文”、“发送HTTP请求”和“接收HTTP返回报文”、“解析HTTP返回报文”两组(共四个)接口。在图1a中,某一层的一个函数在其所调用的下一层函数返回前,自身处于一种“阻塞”状态,只有当它所调用下一层各个函数全部返回,其自身才能返回。
由此可见,一个函数在其调用过程的任意时刻都存在着一个由函数间逐层嵌套调用所产生的调用关系链。图1b展示了交易A调用接口在执行到connect函数时,其函数调用链的示意图。图1b中的左侧虚线框内就是一个接口(函数)调用链。
在异常发生后函数调用链上的函数自底向上逐个返回返回值,直到函数调用链顶层的函数返回错误码,这个过程称之为异常(或错误)沿函数调用链反向传递过程。
现考虑下述场景:在某次交易接口调用过程中,图1a和图1b所示的函数调用链末端的connect发生了连接超时,返回一个异常值,需要系统的日志模块记录错误日志。目前常见的系统日志只记录一个错误码和一些简单的描述,下面的表1就是一个此类异常日志的典型例子。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国农业银行股份有限公司,未经中国农业银行股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910413980.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种直升式的头盔下高空漫游的虚拟现实系统
- 下一篇:一种程序编辑方法和装置